(0) Obligation:
Runtime Complexity Relative TRS:
The TRS R consists of the following rules:
#equal(@x, @y) → #eq(@x, @y)
*(@x, @y) → #mult(@x, @y)
-(@x, @y) → #sub(@x, @y)
div(@x, @y) → #div(@x, @y)
eratos(@l) → eratos#1(@l)
eratos#1(::(@x, @xs)) → ::(@x, eratos(filter(@x, @xs)))
eratos#1(nil) → nil
filter(@p, @l) → filter#1(@l, @p)
filter#1(::(@x, @xs), @p) → filter#2(filter(@p, @xs), @p, @x)
filter#1(nil, @p) → nil
filter#2(@xs', @p, @x) → filter#3(#equal(mod(@x, @p), #0), @x, @xs')
filter#3(#false, @x, @xs') → ::(@x, @xs')
filter#3(#true, @x, @xs') → @xs'
mod(@x, @y) → -(@x, *(@x, div(@x, @y)))
The (relative) TRS S consists of the following rules:
#add(#0, @y) → @y
#add(#neg(#s(#0)), @y) → #pred(@y)
#add(#neg(#s(#s(@x))), @y) → #pred(#add(#pos(#s(@x)), @y))
#add(#pos(#s(#0)), @y) → #succ(@y)
#add(#pos(#s(#s(@x))), @y) → #succ(#add(#pos(#s(@x)), @y))
#and(#false, #false) → #false
#and(#false, #true) → #false
#and(#true, #false) → #false
#and(#true, #true) → #true
#div(#0, #0) → #divByZero
#div(#0, #neg(@y)) → #0
#div(#0, #pos(@y)) → #0
#div(#neg(@x), #0) → #divByZero
#div(#neg(@x), #neg(@y)) → #pos(#natdiv(@x, @y))
#div(#neg(@x), #pos(@y)) → #neg(#natdiv(@x, @y))
#div(#pos(@x), #0) → #divByZero
#div(#pos(@x), #neg(@y)) → #neg(#natdiv(@x, @y))
#div(#pos(@x), #pos(@y)) → #pos(#natdiv(@x, @y))
#eq(#0, #0) → #true
#eq(#0, #neg(@y)) → #false
#eq(#0, #pos(@y)) → #false
#eq(#0, #s(@y)) → #false
#eq(#neg(@x), #0) → #false
#eq(#neg(@x), #neg(@y)) → #eq(@x, @y)
#eq(#neg(@x), #pos(@y)) → #false
#eq(#pos(@x), #0) → #false
#eq(#pos(@x), #neg(@y)) → #false
#eq(#pos(@x), #pos(@y)) → #eq(@x, @y)
#eq(#s(@x), #0) → #false
#eq(#s(@x), #s(@y)) → #eq(@x, @y)
#eq(::(@x_1, @x_2), ::(@y_1, @y_2)) → #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))
#eq(::(@x_1, @x_2), nil) → #false
#eq(nil, ::(@y_1, @y_2)) → #false
#eq(nil, nil) → #true
#mult(#0, #0) → #0
#mult(#0, #neg(@y)) → #0
#mult(#0, #pos(@y)) → #0
#mult(#neg(@x), #0) → #0
#mult(#neg(@x), #neg(@y)) → #pos(#natmult(@x, @y))
#mult(#neg(@x), #pos(@y)) → #neg(#natmult(@x, @y))
#mult(#pos(@x), #0) → #0
#mult(#pos(@x), #neg(@y)) → #neg(#natmult(@x, @y))
#mult(#pos(@x), #pos(@y)) → #pos(#natmult(@x, @y))
#natdiv(#0, #0) → #divByZero
#natdiv(#s(@x), #s(@y)) → #s(#natdiv(#natsub(@x, @y), #s(@y)))
#natmult(#0, @y) → #0
#natmult(#s(@x), @y) → #add(#pos(@y), #natmult(@x, @y))
#natsub(@x, #0) → @x
#natsub(#s(@x), #s(@y)) → #natsub(@x, @y)
#pred(#0) → #neg(#s(#0))
#pred(#neg(#s(@x))) → #neg(#s(#s(@x)))
#pred(#pos(#s(#0))) → #0
#pred(#pos(#s(#s(@x)))) → #pos(#s(@x))
#sub(@x, #0) → @x
#sub(@x, #neg(@y)) → #add(@x, #pos(@y))
#sub(@x, #pos(@y)) → #add(@x, #neg(@y))
#succ(#0) → #pos(#s(#0))
#succ(#neg(#s(#0))) → #0
#succ(#neg(#s(#s(@x)))) → #neg(#s(@x))
#succ(#pos(#s(@x))) → #pos(#s(#s(@x)))
Rewrite Strategy: INNERMOST
(1) RenamingProof (EQUIVALENT transformation)
Renamed function symbols to avoid clashes with predefined symbol.
(2) Obligation:
Runtime Complexity Relative TRS:
The TRS R consists of the following rules:
#equal(@x, @y) → #eq(@x, @y)
*'(@x, @y) → #mult(@x, @y)
-(@x, @y) → #sub(@x, @y)
div(@x, @y) → #div(@x, @y)
eratos(@l) → eratos#1(@l)
eratos#1(::(@x, @xs)) → ::(@x, eratos(filter(@x, @xs)))
eratos#1(nil) → nil
filter(@p, @l) → filter#1(@l, @p)
filter#1(::(@x, @xs), @p) → filter#2(filter(@p, @xs), @p, @x)
filter#1(nil, @p) → nil
filter#2(@xs', @p, @x) → filter#3(#equal(mod(@x, @p), #0), @x, @xs')
filter#3(#false, @x, @xs') → ::(@x, @xs')
filter#3(#true, @x, @xs') → @xs'
mod(@x, @y) → -(@x, *'(@x, div(@x, @y)))
The (relative) TRS S consists of the following rules:
#add(#0, @y) → @y
#add(#neg(#s(#0)), @y) → #pred(@y)
#add(#neg(#s(#s(@x))), @y) → #pred(#add(#pos(#s(@x)), @y))
#add(#pos(#s(#0)), @y) → #succ(@y)
#add(#pos(#s(#s(@x))), @y) → #succ(#add(#pos(#s(@x)), @y))
#and(#false, #false) → #false
#and(#false, #true) → #false
#and(#true, #false) → #false
#and(#true, #true) → #true
#div(#0, #0) → #divByZero
#div(#0, #neg(@y)) → #0
#div(#0, #pos(@y)) → #0
#div(#neg(@x), #0) → #divByZero
#div(#neg(@x), #neg(@y)) → #pos(#natdiv(@x, @y))
#div(#neg(@x), #pos(@y)) → #neg(#natdiv(@x, @y))
#div(#pos(@x), #0) → #divByZero
#div(#pos(@x), #neg(@y)) → #neg(#natdiv(@x, @y))
#div(#pos(@x), #pos(@y)) → #pos(#natdiv(@x, @y))
#eq(#0, #0) → #true
#eq(#0, #neg(@y)) → #false
#eq(#0, #pos(@y)) → #false
#eq(#0, #s(@y)) → #false
#eq(#neg(@x), #0) → #false
#eq(#neg(@x), #neg(@y)) → #eq(@x, @y)
#eq(#neg(@x), #pos(@y)) → #false
#eq(#pos(@x), #0) → #false
#eq(#pos(@x), #neg(@y)) → #false
#eq(#pos(@x), #pos(@y)) → #eq(@x, @y)
#eq(#s(@x), #0) → #false
#eq(#s(@x), #s(@y)) → #eq(@x, @y)
#eq(::(@x_1, @x_2), ::(@y_1, @y_2)) → #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))
#eq(::(@x_1, @x_2), nil) → #false
#eq(nil, ::(@y_1, @y_2)) → #false
#eq(nil, nil) → #true
#mult(#0, #0) → #0
#mult(#0, #neg(@y)) → #0
#mult(#0, #pos(@y)) → #0
#mult(#neg(@x), #0) → #0
#mult(#neg(@x), #neg(@y)) → #pos(#natmult(@x, @y))
#mult(#neg(@x), #pos(@y)) → #neg(#natmult(@x, @y))
#mult(#pos(@x), #0) → #0
#mult(#pos(@x), #neg(@y)) → #neg(#natmult(@x, @y))
#mult(#pos(@x), #pos(@y)) → #pos(#natmult(@x, @y))
#natdiv(#0, #0) → #divByZero
#natdiv(#s(@x), #s(@y)) → #s(#natdiv(#natsub(@x, @y), #s(@y)))
#natmult(#0, @y) → #0
#natmult(#s(@x), @y) → #add(#pos(@y), #natmult(@x, @y))
#natsub(@x, #0) → @x
#natsub(#s(@x), #s(@y)) → #natsub(@x, @y)
#pred(#0) → #neg(#s(#0))
#pred(#neg(#s(@x))) → #neg(#s(#s(@x)))
#pred(#pos(#s(#0))) → #0
#pred(#pos(#s(#s(@x)))) → #pos(#s(@x))
#sub(@x, #0) → @x
#sub(@x, #neg(@y)) → #add(@x, #pos(@y))
#sub(@x, #pos(@y)) → #add(@x, #neg(@y))
#succ(#0) → #pos(#s(#0))
#succ(#neg(#s(#0))) → #0
#succ(#neg(#s(#s(@x)))) → #neg(#s(@x))
#succ(#pos(#s(@x))) → #pos(#s(#s(@x)))
Rewrite Strategy: INNERMOST
(3) TypeInferenceProof (BOTH BOUNDS(ID, ID) transformation)
Infered types.
(4) Obligation:
Innermost TRS:
Rules:
#equal(@x, @y) → #eq(@x, @y)
*'(@x, @y) → #mult(@x, @y)
-(@x, @y) → #sub(@x, @y)
div(@x, @y) → #div(@x, @y)
eratos(@l) → eratos#1(@l)
eratos#1(::(@x, @xs)) → ::(@x, eratos(filter(@x, @xs)))
eratos#1(nil) → nil
filter(@p, @l) → filter#1(@l, @p)
filter#1(::(@x, @xs), @p) → filter#2(filter(@p, @xs), @p, @x)
filter#1(nil, @p) → nil
filter#2(@xs', @p, @x) → filter#3(#equal(mod(@x, @p), #0), @x, @xs')
filter#3(#false, @x, @xs') → ::(@x, @xs')
filter#3(#true, @x, @xs') → @xs'
mod(@x, @y) → -(@x, *'(@x, div(@x, @y)))
#add(#0, @y) → @y
#add(#neg(#s(#0)), @y) → #pred(@y)
#add(#neg(#s(#s(@x))), @y) → #pred(#add(#pos(#s(@x)), @y))
#add(#pos(#s(#0)), @y) → #succ(@y)
#add(#pos(#s(#s(@x))), @y) → #succ(#add(#pos(#s(@x)), @y))
#and(#false, #false) → #false
#and(#false, #true) → #false
#and(#true, #false) → #false
#and(#true, #true) → #true
#div(#0, #0) → #divByZero
#div(#0, #neg(@y)) → #0
#div(#0, #pos(@y)) → #0
#div(#neg(@x), #0) → #divByZero
#div(#neg(@x), #neg(@y)) → #pos(#natdiv(@x, @y))
#div(#neg(@x), #pos(@y)) → #neg(#natdiv(@x, @y))
#div(#pos(@x), #0) → #divByZero
#div(#pos(@x), #neg(@y)) → #neg(#natdiv(@x, @y))
#div(#pos(@x), #pos(@y)) → #pos(#natdiv(@x, @y))
#eq(#0, #0) → #true
#eq(#0, #neg(@y)) → #false
#eq(#0, #pos(@y)) → #false
#eq(#0, #s(@y)) → #false
#eq(#neg(@x), #0) → #false
#eq(#neg(@x), #neg(@y)) → #eq(@x, @y)
#eq(#neg(@x), #pos(@y)) → #false
#eq(#pos(@x), #0) → #false
#eq(#pos(@x), #neg(@y)) → #false
#eq(#pos(@x), #pos(@y)) → #eq(@x, @y)
#eq(#s(@x), #0) → #false
#eq(#s(@x), #s(@y)) → #eq(@x, @y)
#eq(::(@x_1, @x_2), ::(@y_1, @y_2)) → #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))
#eq(::(@x_1, @x_2), nil) → #false
#eq(nil, ::(@y_1, @y_2)) → #false
#eq(nil, nil) → #true
#mult(#0, #0) → #0
#mult(#0, #neg(@y)) → #0
#mult(#0, #pos(@y)) → #0
#mult(#neg(@x), #0) → #0
#mult(#neg(@x), #neg(@y)) → #pos(#natmult(@x, @y))
#mult(#neg(@x), #pos(@y)) → #neg(#natmult(@x, @y))
#mult(#pos(@x), #0) → #0
#mult(#pos(@x), #neg(@y)) → #neg(#natmult(@x, @y))
#mult(#pos(@x), #pos(@y)) → #pos(#natmult(@x, @y))
#natdiv(#0, #0) → #divByZero
#natdiv(#s(@x), #s(@y)) → #s(#natdiv(#natsub(@x, @y), #s(@y)))
#natmult(#0, @y) → #0
#natmult(#s(@x), @y) → #add(#pos(@y), #natmult(@x, @y))
#natsub(@x, #0) → @x
#natsub(#s(@x), #s(@y)) → #natsub(@x, @y)
#pred(#0) → #neg(#s(#0))
#pred(#neg(#s(@x))) → #neg(#s(#s(@x)))
#pred(#pos(#s(#0))) → #0
#pred(#pos(#s(#s(@x)))) → #pos(#s(@x))
#sub(@x, #0) → @x
#sub(@x, #neg(@y)) → #add(@x, #pos(@y))
#sub(@x, #pos(@y)) → #add(@x, #neg(@y))
#succ(#0) → #pos(#s(#0))
#succ(#neg(#s(#0))) → #0
#succ(#neg(#s(#s(@x)))) → #neg(#s(@x))
#succ(#pos(#s(@x))) → #pos(#s(#s(@x)))
Types:
#equal :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → #false:#true
#eq :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → #false:#true
*' :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#mult :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
- :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#sub :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
div :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#div :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
eratos :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
eratos#1 :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
:: :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
filter :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
nil :: :::nil:#0:#s:#neg:#pos:#divByZero
filter#1 :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
filter#2 :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
filter#3 :: #false:#true → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
mod :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#0 :: :::nil:#0:#s:#neg:#pos:#divByZero
#false :: #false:#true
#true :: #false:#true
#add :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#neg :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#s :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#pred :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#pos :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#succ :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#and :: #false:#true → #false:#true → #false:#true
#divByZero :: :::nil:#0:#s:#neg:#pos:#divByZero
#natdiv :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#natmult :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#natsub :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
hole_#false:#true1_4 :: #false:#true
hole_:::nil:#0:#s:#neg:#pos:#divByZero2_4 :: :::nil:#0:#s:#neg:#pos:#divByZero
gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4 :: Nat → :::nil:#0:#s:#neg:#pos:#divByZero
(5) OrderProof (LOWER BOUND(ID) transformation)
Heuristically decided to analyse the following defined symbols:
#eq,
eratos,
eratos#1,
filter,
filter#1,
#add,
#natdiv,
#natmult,
#natsubThey will be analysed ascendingly in the following order:
eratos = eratos#1
filter < eratos#1
filter = filter#1
#add < #natmult
#natsub < #natdiv
(6) Obligation:
Innermost TRS:
Rules:
#equal(
@x,
@y) →
#eq(
@x,
@y)
*'(
@x,
@y) →
#mult(
@x,
@y)
-(
@x,
@y) →
#sub(
@x,
@y)
div(
@x,
@y) →
#div(
@x,
@y)
eratos(
@l) →
eratos#1(
@l)
eratos#1(
::(
@x,
@xs)) →
::(
@x,
eratos(
filter(
@x,
@xs)))
eratos#1(
nil) →
nilfilter(
@p,
@l) →
filter#1(
@l,
@p)
filter#1(
::(
@x,
@xs),
@p) →
filter#2(
filter(
@p,
@xs),
@p,
@x)
filter#1(
nil,
@p) →
nilfilter#2(
@xs',
@p,
@x) →
filter#3(
#equal(
mod(
@x,
@p),
#0),
@x,
@xs')
filter#3(
#false,
@x,
@xs') →
::(
@x,
@xs')
filter#3(
#true,
@x,
@xs') →
@xs'mod(
@x,
@y) →
-(
@x,
*'(
@x,
div(
@x,
@y)))
#add(
#0,
@y) →
@y#add(
#neg(
#s(
#0)),
@y) →
#pred(
@y)
#add(
#neg(
#s(
#s(
@x))),
@y) →
#pred(
#add(
#pos(
#s(
@x)),
@y))
#add(
#pos(
#s(
#0)),
@y) →
#succ(
@y)
#add(
#pos(
#s(
#s(
@x))),
@y) →
#succ(
#add(
#pos(
#s(
@x)),
@y))
#and(
#false,
#false) →
#false#and(
#false,
#true) →
#false#and(
#true,
#false) →
#false#and(
#true,
#true) →
#true#div(
#0,
#0) →
#divByZero#div(
#0,
#neg(
@y)) →
#0#div(
#0,
#pos(
@y)) →
#0#div(
#neg(
@x),
#0) →
#divByZero#div(
#neg(
@x),
#neg(
@y)) →
#pos(
#natdiv(
@x,
@y))
#div(
#neg(
@x),
#pos(
@y)) →
#neg(
#natdiv(
@x,
@y))
#div(
#pos(
@x),
#0) →
#divByZero#div(
#pos(
@x),
#neg(
@y)) →
#neg(
#natdiv(
@x,
@y))
#div(
#pos(
@x),
#pos(
@y)) →
#pos(
#natdiv(
@x,
@y))
#eq(
#0,
#0) →
#true#eq(
#0,
#neg(
@y)) →
#false#eq(
#0,
#pos(
@y)) →
#false#eq(
#0,
#s(
@y)) →
#false#eq(
#neg(
@x),
#0) →
#false#eq(
#neg(
@x),
#neg(
@y)) →
#eq(
@x,
@y)
#eq(
#neg(
@x),
#pos(
@y)) →
#false#eq(
#pos(
@x),
#0) →
#false#eq(
#pos(
@x),
#neg(
@y)) →
#false#eq(
#pos(
@x),
#pos(
@y)) →
#eq(
@x,
@y)
#eq(
#s(
@x),
#0) →
#false#eq(
#s(
@x),
#s(
@y)) →
#eq(
@x,
@y)
#eq(
::(
@x_1,
@x_2),
::(
@y_1,
@y_2)) →
#and(
#eq(
@x_1,
@y_1),
#eq(
@x_2,
@y_2))
#eq(
::(
@x_1,
@x_2),
nil) →
#false#eq(
nil,
::(
@y_1,
@y_2)) →
#false#eq(
nil,
nil) →
#true#mult(
#0,
#0) →
#0#mult(
#0,
#neg(
@y)) →
#0#mult(
#0,
#pos(
@y)) →
#0#mult(
#neg(
@x),
#0) →
#0#mult(
#neg(
@x),
#neg(
@y)) →
#pos(
#natmult(
@x,
@y))
#mult(
#neg(
@x),
#pos(
@y)) →
#neg(
#natmult(
@x,
@y))
#mult(
#pos(
@x),
#0) →
#0#mult(
#pos(
@x),
#neg(
@y)) →
#neg(
#natmult(
@x,
@y))
#mult(
#pos(
@x),
#pos(
@y)) →
#pos(
#natmult(
@x,
@y))
#natdiv(
#0,
#0) →
#divByZero#natdiv(
#s(
@x),
#s(
@y)) →
#s(
#natdiv(
#natsub(
@x,
@y),
#s(
@y)))
#natmult(
#0,
@y) →
#0#natmult(
#s(
@x),
@y) →
#add(
#pos(
@y),
#natmult(
@x,
@y))
#natsub(
@x,
#0) →
@x#natsub(
#s(
@x),
#s(
@y)) →
#natsub(
@x,
@y)
#pred(
#0) →
#neg(
#s(
#0))
#pred(
#neg(
#s(
@x))) →
#neg(
#s(
#s(
@x)))
#pred(
#pos(
#s(
#0))) →
#0#pred(
#pos(
#s(
#s(
@x)))) →
#pos(
#s(
@x))
#sub(
@x,
#0) →
@x#sub(
@x,
#neg(
@y)) →
#add(
@x,
#pos(
@y))
#sub(
@x,
#pos(
@y)) →
#add(
@x,
#neg(
@y))
#succ(
#0) →
#pos(
#s(
#0))
#succ(
#neg(
#s(
#0))) →
#0#succ(
#neg(
#s(
#s(
@x)))) →
#neg(
#s(
@x))
#succ(
#pos(
#s(
@x))) →
#pos(
#s(
#s(
@x)))
Types:
#equal :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → #false:#true
#eq :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → #false:#true
*' :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#mult :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
- :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#sub :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
div :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#div :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
eratos :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
eratos#1 :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
:: :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
filter :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
nil :: :::nil:#0:#s:#neg:#pos:#divByZero
filter#1 :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
filter#2 :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
filter#3 :: #false:#true → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
mod :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#0 :: :::nil:#0:#s:#neg:#pos:#divByZero
#false :: #false:#true
#true :: #false:#true
#add :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#neg :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#s :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#pred :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#pos :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#succ :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#and :: #false:#true → #false:#true → #false:#true
#divByZero :: :::nil:#0:#s:#neg:#pos:#divByZero
#natdiv :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#natmult :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#natsub :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
hole_#false:#true1_4 :: #false:#true
hole_:::nil:#0:#s:#neg:#pos:#divByZero2_4 :: :::nil:#0:#s:#neg:#pos:#divByZero
gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4 :: Nat → :::nil:#0:#s:#neg:#pos:#divByZero
Generator Equations:
gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(0) ⇔ nil
gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(+(x, 1)) ⇔ ::(nil, gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(x))
The following defined symbols remain to be analysed:
#eq, eratos, eratos#1, filter, filter#1, #add, #natdiv, #natmult, #natsub
They will be analysed ascendingly in the following order:
eratos = eratos#1
filter < eratos#1
filter = filter#1
#add < #natmult
#natsub < #natdiv
(7) RewriteLemmaProof (LOWER BOUND(ID) transformation)
Proved the following rewrite lemma:
#eq(
gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(
+(
1,
n5_4)),
gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(
n5_4)) →
#false, rt ∈ Ω(0)
Induction Base:
#eq(gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(+(1, 0)), gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(0)) →RΩ(0)
#false
Induction Step:
#eq(gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(+(1, +(n5_4, 1))), gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(+(n5_4, 1))) →RΩ(0)
#and(#eq(nil, nil), #eq(gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(+(1, n5_4)), gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(n5_4))) →RΩ(0)
#and(#true, #eq(gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(+(1, n5_4)), gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(n5_4))) →IH
#and(#true, #false) →RΩ(0)
#false
We have rt ∈ Ω(1) and sz ∈ O(n). Thus, we have ircR ∈ Ω(n0).
(8) Complex Obligation (BEST)
(9) Obligation:
Innermost TRS:
Rules:
#equal(
@x,
@y) →
#eq(
@x,
@y)
*'(
@x,
@y) →
#mult(
@x,
@y)
-(
@x,
@y) →
#sub(
@x,
@y)
div(
@x,
@y) →
#div(
@x,
@y)
eratos(
@l) →
eratos#1(
@l)
eratos#1(
::(
@x,
@xs)) →
::(
@x,
eratos(
filter(
@x,
@xs)))
eratos#1(
nil) →
nilfilter(
@p,
@l) →
filter#1(
@l,
@p)
filter#1(
::(
@x,
@xs),
@p) →
filter#2(
filter(
@p,
@xs),
@p,
@x)
filter#1(
nil,
@p) →
nilfilter#2(
@xs',
@p,
@x) →
filter#3(
#equal(
mod(
@x,
@p),
#0),
@x,
@xs')
filter#3(
#false,
@x,
@xs') →
::(
@x,
@xs')
filter#3(
#true,
@x,
@xs') →
@xs'mod(
@x,
@y) →
-(
@x,
*'(
@x,
div(
@x,
@y)))
#add(
#0,
@y) →
@y#add(
#neg(
#s(
#0)),
@y) →
#pred(
@y)
#add(
#neg(
#s(
#s(
@x))),
@y) →
#pred(
#add(
#pos(
#s(
@x)),
@y))
#add(
#pos(
#s(
#0)),
@y) →
#succ(
@y)
#add(
#pos(
#s(
#s(
@x))),
@y) →
#succ(
#add(
#pos(
#s(
@x)),
@y))
#and(
#false,
#false) →
#false#and(
#false,
#true) →
#false#and(
#true,
#false) →
#false#and(
#true,
#true) →
#true#div(
#0,
#0) →
#divByZero#div(
#0,
#neg(
@y)) →
#0#div(
#0,
#pos(
@y)) →
#0#div(
#neg(
@x),
#0) →
#divByZero#div(
#neg(
@x),
#neg(
@y)) →
#pos(
#natdiv(
@x,
@y))
#div(
#neg(
@x),
#pos(
@y)) →
#neg(
#natdiv(
@x,
@y))
#div(
#pos(
@x),
#0) →
#divByZero#div(
#pos(
@x),
#neg(
@y)) →
#neg(
#natdiv(
@x,
@y))
#div(
#pos(
@x),
#pos(
@y)) →
#pos(
#natdiv(
@x,
@y))
#eq(
#0,
#0) →
#true#eq(
#0,
#neg(
@y)) →
#false#eq(
#0,
#pos(
@y)) →
#false#eq(
#0,
#s(
@y)) →
#false#eq(
#neg(
@x),
#0) →
#false#eq(
#neg(
@x),
#neg(
@y)) →
#eq(
@x,
@y)
#eq(
#neg(
@x),
#pos(
@y)) →
#false#eq(
#pos(
@x),
#0) →
#false#eq(
#pos(
@x),
#neg(
@y)) →
#false#eq(
#pos(
@x),
#pos(
@y)) →
#eq(
@x,
@y)
#eq(
#s(
@x),
#0) →
#false#eq(
#s(
@x),
#s(
@y)) →
#eq(
@x,
@y)
#eq(
::(
@x_1,
@x_2),
::(
@y_1,
@y_2)) →
#and(
#eq(
@x_1,
@y_1),
#eq(
@x_2,
@y_2))
#eq(
::(
@x_1,
@x_2),
nil) →
#false#eq(
nil,
::(
@y_1,
@y_2)) →
#false#eq(
nil,
nil) →
#true#mult(
#0,
#0) →
#0#mult(
#0,
#neg(
@y)) →
#0#mult(
#0,
#pos(
@y)) →
#0#mult(
#neg(
@x),
#0) →
#0#mult(
#neg(
@x),
#neg(
@y)) →
#pos(
#natmult(
@x,
@y))
#mult(
#neg(
@x),
#pos(
@y)) →
#neg(
#natmult(
@x,
@y))
#mult(
#pos(
@x),
#0) →
#0#mult(
#pos(
@x),
#neg(
@y)) →
#neg(
#natmult(
@x,
@y))
#mult(
#pos(
@x),
#pos(
@y)) →
#pos(
#natmult(
@x,
@y))
#natdiv(
#0,
#0) →
#divByZero#natdiv(
#s(
@x),
#s(
@y)) →
#s(
#natdiv(
#natsub(
@x,
@y),
#s(
@y)))
#natmult(
#0,
@y) →
#0#natmult(
#s(
@x),
@y) →
#add(
#pos(
@y),
#natmult(
@x,
@y))
#natsub(
@x,
#0) →
@x#natsub(
#s(
@x),
#s(
@y)) →
#natsub(
@x,
@y)
#pred(
#0) →
#neg(
#s(
#0))
#pred(
#neg(
#s(
@x))) →
#neg(
#s(
#s(
@x)))
#pred(
#pos(
#s(
#0))) →
#0#pred(
#pos(
#s(
#s(
@x)))) →
#pos(
#s(
@x))
#sub(
@x,
#0) →
@x#sub(
@x,
#neg(
@y)) →
#add(
@x,
#pos(
@y))
#sub(
@x,
#pos(
@y)) →
#add(
@x,
#neg(
@y))
#succ(
#0) →
#pos(
#s(
#0))
#succ(
#neg(
#s(
#0))) →
#0#succ(
#neg(
#s(
#s(
@x)))) →
#neg(
#s(
@x))
#succ(
#pos(
#s(
@x))) →
#pos(
#s(
#s(
@x)))
Types:
#equal :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → #false:#true
#eq :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → #false:#true
*' :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#mult :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
- :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#sub :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
div :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#div :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
eratos :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
eratos#1 :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
:: :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
filter :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
nil :: :::nil:#0:#s:#neg:#pos:#divByZero
filter#1 :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
filter#2 :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
filter#3 :: #false:#true → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
mod :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#0 :: :::nil:#0:#s:#neg:#pos:#divByZero
#false :: #false:#true
#true :: #false:#true
#add :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#neg :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#s :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#pred :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#pos :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#succ :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#and :: #false:#true → #false:#true → #false:#true
#divByZero :: :::nil:#0:#s:#neg:#pos:#divByZero
#natdiv :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#natmult :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#natsub :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
hole_#false:#true1_4 :: #false:#true
hole_:::nil:#0:#s:#neg:#pos:#divByZero2_4 :: :::nil:#0:#s:#neg:#pos:#divByZero
gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4 :: Nat → :::nil:#0:#s:#neg:#pos:#divByZero
Lemmas:
#eq(gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(+(1, n5_4)), gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(n5_4)) → #false, rt ∈ Ω(0)
Generator Equations:
gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(0) ⇔ nil
gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(+(x, 1)) ⇔ ::(nil, gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(x))
The following defined symbols remain to be analysed:
#add, eratos, eratos#1, filter, filter#1, #natdiv, #natmult, #natsub
They will be analysed ascendingly in the following order:
eratos = eratos#1
filter < eratos#1
filter = filter#1
#add < #natmult
#natsub < #natdiv
(10) NoRewriteLemmaProof (LOWER BOUND(ID) transformation)
Could not prove a rewrite lemma for the defined symbol #add.
(11) Obligation:
Innermost TRS:
Rules:
#equal(
@x,
@y) →
#eq(
@x,
@y)
*'(
@x,
@y) →
#mult(
@x,
@y)
-(
@x,
@y) →
#sub(
@x,
@y)
div(
@x,
@y) →
#div(
@x,
@y)
eratos(
@l) →
eratos#1(
@l)
eratos#1(
::(
@x,
@xs)) →
::(
@x,
eratos(
filter(
@x,
@xs)))
eratos#1(
nil) →
nilfilter(
@p,
@l) →
filter#1(
@l,
@p)
filter#1(
::(
@x,
@xs),
@p) →
filter#2(
filter(
@p,
@xs),
@p,
@x)
filter#1(
nil,
@p) →
nilfilter#2(
@xs',
@p,
@x) →
filter#3(
#equal(
mod(
@x,
@p),
#0),
@x,
@xs')
filter#3(
#false,
@x,
@xs') →
::(
@x,
@xs')
filter#3(
#true,
@x,
@xs') →
@xs'mod(
@x,
@y) →
-(
@x,
*'(
@x,
div(
@x,
@y)))
#add(
#0,
@y) →
@y#add(
#neg(
#s(
#0)),
@y) →
#pred(
@y)
#add(
#neg(
#s(
#s(
@x))),
@y) →
#pred(
#add(
#pos(
#s(
@x)),
@y))
#add(
#pos(
#s(
#0)),
@y) →
#succ(
@y)
#add(
#pos(
#s(
#s(
@x))),
@y) →
#succ(
#add(
#pos(
#s(
@x)),
@y))
#and(
#false,
#false) →
#false#and(
#false,
#true) →
#false#and(
#true,
#false) →
#false#and(
#true,
#true) →
#true#div(
#0,
#0) →
#divByZero#div(
#0,
#neg(
@y)) →
#0#div(
#0,
#pos(
@y)) →
#0#div(
#neg(
@x),
#0) →
#divByZero#div(
#neg(
@x),
#neg(
@y)) →
#pos(
#natdiv(
@x,
@y))
#div(
#neg(
@x),
#pos(
@y)) →
#neg(
#natdiv(
@x,
@y))
#div(
#pos(
@x),
#0) →
#divByZero#div(
#pos(
@x),
#neg(
@y)) →
#neg(
#natdiv(
@x,
@y))
#div(
#pos(
@x),
#pos(
@y)) →
#pos(
#natdiv(
@x,
@y))
#eq(
#0,
#0) →
#true#eq(
#0,
#neg(
@y)) →
#false#eq(
#0,
#pos(
@y)) →
#false#eq(
#0,
#s(
@y)) →
#false#eq(
#neg(
@x),
#0) →
#false#eq(
#neg(
@x),
#neg(
@y)) →
#eq(
@x,
@y)
#eq(
#neg(
@x),
#pos(
@y)) →
#false#eq(
#pos(
@x),
#0) →
#false#eq(
#pos(
@x),
#neg(
@y)) →
#false#eq(
#pos(
@x),
#pos(
@y)) →
#eq(
@x,
@y)
#eq(
#s(
@x),
#0) →
#false#eq(
#s(
@x),
#s(
@y)) →
#eq(
@x,
@y)
#eq(
::(
@x_1,
@x_2),
::(
@y_1,
@y_2)) →
#and(
#eq(
@x_1,
@y_1),
#eq(
@x_2,
@y_2))
#eq(
::(
@x_1,
@x_2),
nil) →
#false#eq(
nil,
::(
@y_1,
@y_2)) →
#false#eq(
nil,
nil) →
#true#mult(
#0,
#0) →
#0#mult(
#0,
#neg(
@y)) →
#0#mult(
#0,
#pos(
@y)) →
#0#mult(
#neg(
@x),
#0) →
#0#mult(
#neg(
@x),
#neg(
@y)) →
#pos(
#natmult(
@x,
@y))
#mult(
#neg(
@x),
#pos(
@y)) →
#neg(
#natmult(
@x,
@y))
#mult(
#pos(
@x),
#0) →
#0#mult(
#pos(
@x),
#neg(
@y)) →
#neg(
#natmult(
@x,
@y))
#mult(
#pos(
@x),
#pos(
@y)) →
#pos(
#natmult(
@x,
@y))
#natdiv(
#0,
#0) →
#divByZero#natdiv(
#s(
@x),
#s(
@y)) →
#s(
#natdiv(
#natsub(
@x,
@y),
#s(
@y)))
#natmult(
#0,
@y) →
#0#natmult(
#s(
@x),
@y) →
#add(
#pos(
@y),
#natmult(
@x,
@y))
#natsub(
@x,
#0) →
@x#natsub(
#s(
@x),
#s(
@y)) →
#natsub(
@x,
@y)
#pred(
#0) →
#neg(
#s(
#0))
#pred(
#neg(
#s(
@x))) →
#neg(
#s(
#s(
@x)))
#pred(
#pos(
#s(
#0))) →
#0#pred(
#pos(
#s(
#s(
@x)))) →
#pos(
#s(
@x))
#sub(
@x,
#0) →
@x#sub(
@x,
#neg(
@y)) →
#add(
@x,
#pos(
@y))
#sub(
@x,
#pos(
@y)) →
#add(
@x,
#neg(
@y))
#succ(
#0) →
#pos(
#s(
#0))
#succ(
#neg(
#s(
#0))) →
#0#succ(
#neg(
#s(
#s(
@x)))) →
#neg(
#s(
@x))
#succ(
#pos(
#s(
@x))) →
#pos(
#s(
#s(
@x)))
Types:
#equal :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → #false:#true
#eq :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → #false:#true
*' :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#mult :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
- :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#sub :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
div :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#div :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
eratos :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
eratos#1 :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
:: :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
filter :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
nil :: :::nil:#0:#s:#neg:#pos:#divByZero
filter#1 :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
filter#2 :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
filter#3 :: #false:#true → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
mod :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#0 :: :::nil:#0:#s:#neg:#pos:#divByZero
#false :: #false:#true
#true :: #false:#true
#add :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#neg :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#s :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#pred :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#pos :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#succ :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#and :: #false:#true → #false:#true → #false:#true
#divByZero :: :::nil:#0:#s:#neg:#pos:#divByZero
#natdiv :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#natmult :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#natsub :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
hole_#false:#true1_4 :: #false:#true
hole_:::nil:#0:#s:#neg:#pos:#divByZero2_4 :: :::nil:#0:#s:#neg:#pos:#divByZero
gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4 :: Nat → :::nil:#0:#s:#neg:#pos:#divByZero
Lemmas:
#eq(gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(+(1, n5_4)), gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(n5_4)) → #false, rt ∈ Ω(0)
Generator Equations:
gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(0) ⇔ nil
gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(+(x, 1)) ⇔ ::(nil, gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(x))
The following defined symbols remain to be analysed:
#natmult, eratos, eratos#1, filter, filter#1, #natdiv, #natsub
They will be analysed ascendingly in the following order:
eratos = eratos#1
filter < eratos#1
filter = filter#1
#natsub < #natdiv
(12) NoRewriteLemmaProof (LOWER BOUND(ID) transformation)
Could not prove a rewrite lemma for the defined symbol #natmult.
(13) Obligation:
Innermost TRS:
Rules:
#equal(
@x,
@y) →
#eq(
@x,
@y)
*'(
@x,
@y) →
#mult(
@x,
@y)
-(
@x,
@y) →
#sub(
@x,
@y)
div(
@x,
@y) →
#div(
@x,
@y)
eratos(
@l) →
eratos#1(
@l)
eratos#1(
::(
@x,
@xs)) →
::(
@x,
eratos(
filter(
@x,
@xs)))
eratos#1(
nil) →
nilfilter(
@p,
@l) →
filter#1(
@l,
@p)
filter#1(
::(
@x,
@xs),
@p) →
filter#2(
filter(
@p,
@xs),
@p,
@x)
filter#1(
nil,
@p) →
nilfilter#2(
@xs',
@p,
@x) →
filter#3(
#equal(
mod(
@x,
@p),
#0),
@x,
@xs')
filter#3(
#false,
@x,
@xs') →
::(
@x,
@xs')
filter#3(
#true,
@x,
@xs') →
@xs'mod(
@x,
@y) →
-(
@x,
*'(
@x,
div(
@x,
@y)))
#add(
#0,
@y) →
@y#add(
#neg(
#s(
#0)),
@y) →
#pred(
@y)
#add(
#neg(
#s(
#s(
@x))),
@y) →
#pred(
#add(
#pos(
#s(
@x)),
@y))
#add(
#pos(
#s(
#0)),
@y) →
#succ(
@y)
#add(
#pos(
#s(
#s(
@x))),
@y) →
#succ(
#add(
#pos(
#s(
@x)),
@y))
#and(
#false,
#false) →
#false#and(
#false,
#true) →
#false#and(
#true,
#false) →
#false#and(
#true,
#true) →
#true#div(
#0,
#0) →
#divByZero#div(
#0,
#neg(
@y)) →
#0#div(
#0,
#pos(
@y)) →
#0#div(
#neg(
@x),
#0) →
#divByZero#div(
#neg(
@x),
#neg(
@y)) →
#pos(
#natdiv(
@x,
@y))
#div(
#neg(
@x),
#pos(
@y)) →
#neg(
#natdiv(
@x,
@y))
#div(
#pos(
@x),
#0) →
#divByZero#div(
#pos(
@x),
#neg(
@y)) →
#neg(
#natdiv(
@x,
@y))
#div(
#pos(
@x),
#pos(
@y)) →
#pos(
#natdiv(
@x,
@y))
#eq(
#0,
#0) →
#true#eq(
#0,
#neg(
@y)) →
#false#eq(
#0,
#pos(
@y)) →
#false#eq(
#0,
#s(
@y)) →
#false#eq(
#neg(
@x),
#0) →
#false#eq(
#neg(
@x),
#neg(
@y)) →
#eq(
@x,
@y)
#eq(
#neg(
@x),
#pos(
@y)) →
#false#eq(
#pos(
@x),
#0) →
#false#eq(
#pos(
@x),
#neg(
@y)) →
#false#eq(
#pos(
@x),
#pos(
@y)) →
#eq(
@x,
@y)
#eq(
#s(
@x),
#0) →
#false#eq(
#s(
@x),
#s(
@y)) →
#eq(
@x,
@y)
#eq(
::(
@x_1,
@x_2),
::(
@y_1,
@y_2)) →
#and(
#eq(
@x_1,
@y_1),
#eq(
@x_2,
@y_2))
#eq(
::(
@x_1,
@x_2),
nil) →
#false#eq(
nil,
::(
@y_1,
@y_2)) →
#false#eq(
nil,
nil) →
#true#mult(
#0,
#0) →
#0#mult(
#0,
#neg(
@y)) →
#0#mult(
#0,
#pos(
@y)) →
#0#mult(
#neg(
@x),
#0) →
#0#mult(
#neg(
@x),
#neg(
@y)) →
#pos(
#natmult(
@x,
@y))
#mult(
#neg(
@x),
#pos(
@y)) →
#neg(
#natmult(
@x,
@y))
#mult(
#pos(
@x),
#0) →
#0#mult(
#pos(
@x),
#neg(
@y)) →
#neg(
#natmult(
@x,
@y))
#mult(
#pos(
@x),
#pos(
@y)) →
#pos(
#natmult(
@x,
@y))
#natdiv(
#0,
#0) →
#divByZero#natdiv(
#s(
@x),
#s(
@y)) →
#s(
#natdiv(
#natsub(
@x,
@y),
#s(
@y)))
#natmult(
#0,
@y) →
#0#natmult(
#s(
@x),
@y) →
#add(
#pos(
@y),
#natmult(
@x,
@y))
#natsub(
@x,
#0) →
@x#natsub(
#s(
@x),
#s(
@y)) →
#natsub(
@x,
@y)
#pred(
#0) →
#neg(
#s(
#0))
#pred(
#neg(
#s(
@x))) →
#neg(
#s(
#s(
@x)))
#pred(
#pos(
#s(
#0))) →
#0#pred(
#pos(
#s(
#s(
@x)))) →
#pos(
#s(
@x))
#sub(
@x,
#0) →
@x#sub(
@x,
#neg(
@y)) →
#add(
@x,
#pos(
@y))
#sub(
@x,
#pos(
@y)) →
#add(
@x,
#neg(
@y))
#succ(
#0) →
#pos(
#s(
#0))
#succ(
#neg(
#s(
#0))) →
#0#succ(
#neg(
#s(
#s(
@x)))) →
#neg(
#s(
@x))
#succ(
#pos(
#s(
@x))) →
#pos(
#s(
#s(
@x)))
Types:
#equal :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → #false:#true
#eq :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → #false:#true
*' :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#mult :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
- :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#sub :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
div :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#div :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
eratos :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
eratos#1 :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
:: :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
filter :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
nil :: :::nil:#0:#s:#neg:#pos:#divByZero
filter#1 :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
filter#2 :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
filter#3 :: #false:#true → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
mod :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#0 :: :::nil:#0:#s:#neg:#pos:#divByZero
#false :: #false:#true
#true :: #false:#true
#add :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#neg :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#s :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#pred :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#pos :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#succ :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#and :: #false:#true → #false:#true → #false:#true
#divByZero :: :::nil:#0:#s:#neg:#pos:#divByZero
#natdiv :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#natmult :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#natsub :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
hole_#false:#true1_4 :: #false:#true
hole_:::nil:#0:#s:#neg:#pos:#divByZero2_4 :: :::nil:#0:#s:#neg:#pos:#divByZero
gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4 :: Nat → :::nil:#0:#s:#neg:#pos:#divByZero
Lemmas:
#eq(gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(+(1, n5_4)), gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(n5_4)) → #false, rt ∈ Ω(0)
Generator Equations:
gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(0) ⇔ nil
gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(+(x, 1)) ⇔ ::(nil, gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(x))
The following defined symbols remain to be analysed:
#natsub, eratos, eratos#1, filter, filter#1, #natdiv
They will be analysed ascendingly in the following order:
eratos = eratos#1
filter < eratos#1
filter = filter#1
#natsub < #natdiv
(14) NoRewriteLemmaProof (LOWER BOUND(ID) transformation)
Could not prove a rewrite lemma for the defined symbol #natsub.
(15) Obligation:
Innermost TRS:
Rules:
#equal(
@x,
@y) →
#eq(
@x,
@y)
*'(
@x,
@y) →
#mult(
@x,
@y)
-(
@x,
@y) →
#sub(
@x,
@y)
div(
@x,
@y) →
#div(
@x,
@y)
eratos(
@l) →
eratos#1(
@l)
eratos#1(
::(
@x,
@xs)) →
::(
@x,
eratos(
filter(
@x,
@xs)))
eratos#1(
nil) →
nilfilter(
@p,
@l) →
filter#1(
@l,
@p)
filter#1(
::(
@x,
@xs),
@p) →
filter#2(
filter(
@p,
@xs),
@p,
@x)
filter#1(
nil,
@p) →
nilfilter#2(
@xs',
@p,
@x) →
filter#3(
#equal(
mod(
@x,
@p),
#0),
@x,
@xs')
filter#3(
#false,
@x,
@xs') →
::(
@x,
@xs')
filter#3(
#true,
@x,
@xs') →
@xs'mod(
@x,
@y) →
-(
@x,
*'(
@x,
div(
@x,
@y)))
#add(
#0,
@y) →
@y#add(
#neg(
#s(
#0)),
@y) →
#pred(
@y)
#add(
#neg(
#s(
#s(
@x))),
@y) →
#pred(
#add(
#pos(
#s(
@x)),
@y))
#add(
#pos(
#s(
#0)),
@y) →
#succ(
@y)
#add(
#pos(
#s(
#s(
@x))),
@y) →
#succ(
#add(
#pos(
#s(
@x)),
@y))
#and(
#false,
#false) →
#false#and(
#false,
#true) →
#false#and(
#true,
#false) →
#false#and(
#true,
#true) →
#true#div(
#0,
#0) →
#divByZero#div(
#0,
#neg(
@y)) →
#0#div(
#0,
#pos(
@y)) →
#0#div(
#neg(
@x),
#0) →
#divByZero#div(
#neg(
@x),
#neg(
@y)) →
#pos(
#natdiv(
@x,
@y))
#div(
#neg(
@x),
#pos(
@y)) →
#neg(
#natdiv(
@x,
@y))
#div(
#pos(
@x),
#0) →
#divByZero#div(
#pos(
@x),
#neg(
@y)) →
#neg(
#natdiv(
@x,
@y))
#div(
#pos(
@x),
#pos(
@y)) →
#pos(
#natdiv(
@x,
@y))
#eq(
#0,
#0) →
#true#eq(
#0,
#neg(
@y)) →
#false#eq(
#0,
#pos(
@y)) →
#false#eq(
#0,
#s(
@y)) →
#false#eq(
#neg(
@x),
#0) →
#false#eq(
#neg(
@x),
#neg(
@y)) →
#eq(
@x,
@y)
#eq(
#neg(
@x),
#pos(
@y)) →
#false#eq(
#pos(
@x),
#0) →
#false#eq(
#pos(
@x),
#neg(
@y)) →
#false#eq(
#pos(
@x),
#pos(
@y)) →
#eq(
@x,
@y)
#eq(
#s(
@x),
#0) →
#false#eq(
#s(
@x),
#s(
@y)) →
#eq(
@x,
@y)
#eq(
::(
@x_1,
@x_2),
::(
@y_1,
@y_2)) →
#and(
#eq(
@x_1,
@y_1),
#eq(
@x_2,
@y_2))
#eq(
::(
@x_1,
@x_2),
nil) →
#false#eq(
nil,
::(
@y_1,
@y_2)) →
#false#eq(
nil,
nil) →
#true#mult(
#0,
#0) →
#0#mult(
#0,
#neg(
@y)) →
#0#mult(
#0,
#pos(
@y)) →
#0#mult(
#neg(
@x),
#0) →
#0#mult(
#neg(
@x),
#neg(
@y)) →
#pos(
#natmult(
@x,
@y))
#mult(
#neg(
@x),
#pos(
@y)) →
#neg(
#natmult(
@x,
@y))
#mult(
#pos(
@x),
#0) →
#0#mult(
#pos(
@x),
#neg(
@y)) →
#neg(
#natmult(
@x,
@y))
#mult(
#pos(
@x),
#pos(
@y)) →
#pos(
#natmult(
@x,
@y))
#natdiv(
#0,
#0) →
#divByZero#natdiv(
#s(
@x),
#s(
@y)) →
#s(
#natdiv(
#natsub(
@x,
@y),
#s(
@y)))
#natmult(
#0,
@y) →
#0#natmult(
#s(
@x),
@y) →
#add(
#pos(
@y),
#natmult(
@x,
@y))
#natsub(
@x,
#0) →
@x#natsub(
#s(
@x),
#s(
@y)) →
#natsub(
@x,
@y)
#pred(
#0) →
#neg(
#s(
#0))
#pred(
#neg(
#s(
@x))) →
#neg(
#s(
#s(
@x)))
#pred(
#pos(
#s(
#0))) →
#0#pred(
#pos(
#s(
#s(
@x)))) →
#pos(
#s(
@x))
#sub(
@x,
#0) →
@x#sub(
@x,
#neg(
@y)) →
#add(
@x,
#pos(
@y))
#sub(
@x,
#pos(
@y)) →
#add(
@x,
#neg(
@y))
#succ(
#0) →
#pos(
#s(
#0))
#succ(
#neg(
#s(
#0))) →
#0#succ(
#neg(
#s(
#s(
@x)))) →
#neg(
#s(
@x))
#succ(
#pos(
#s(
@x))) →
#pos(
#s(
#s(
@x)))
Types:
#equal :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → #false:#true
#eq :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → #false:#true
*' :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#mult :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
- :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#sub :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
div :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#div :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
eratos :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
eratos#1 :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
:: :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
filter :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
nil :: :::nil:#0:#s:#neg:#pos:#divByZero
filter#1 :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
filter#2 :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
filter#3 :: #false:#true → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
mod :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#0 :: :::nil:#0:#s:#neg:#pos:#divByZero
#false :: #false:#true
#true :: #false:#true
#add :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#neg :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#s :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#pred :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#pos :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#succ :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#and :: #false:#true → #false:#true → #false:#true
#divByZero :: :::nil:#0:#s:#neg:#pos:#divByZero
#natdiv :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#natmult :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#natsub :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
hole_#false:#true1_4 :: #false:#true
hole_:::nil:#0:#s:#neg:#pos:#divByZero2_4 :: :::nil:#0:#s:#neg:#pos:#divByZero
gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4 :: Nat → :::nil:#0:#s:#neg:#pos:#divByZero
Lemmas:
#eq(gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(+(1, n5_4)), gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(n5_4)) → #false, rt ∈ Ω(0)
Generator Equations:
gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(0) ⇔ nil
gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(+(x, 1)) ⇔ ::(nil, gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(x))
The following defined symbols remain to be analysed:
#natdiv, eratos, eratos#1, filter, filter#1
They will be analysed ascendingly in the following order:
eratos = eratos#1
filter < eratos#1
filter = filter#1
(16) NoRewriteLemmaProof (LOWER BOUND(ID) transformation)
Could not prove a rewrite lemma for the defined symbol #natdiv.
(17) Obligation:
Innermost TRS:
Rules:
#equal(
@x,
@y) →
#eq(
@x,
@y)
*'(
@x,
@y) →
#mult(
@x,
@y)
-(
@x,
@y) →
#sub(
@x,
@y)
div(
@x,
@y) →
#div(
@x,
@y)
eratos(
@l) →
eratos#1(
@l)
eratos#1(
::(
@x,
@xs)) →
::(
@x,
eratos(
filter(
@x,
@xs)))
eratos#1(
nil) →
nilfilter(
@p,
@l) →
filter#1(
@l,
@p)
filter#1(
::(
@x,
@xs),
@p) →
filter#2(
filter(
@p,
@xs),
@p,
@x)
filter#1(
nil,
@p) →
nilfilter#2(
@xs',
@p,
@x) →
filter#3(
#equal(
mod(
@x,
@p),
#0),
@x,
@xs')
filter#3(
#false,
@x,
@xs') →
::(
@x,
@xs')
filter#3(
#true,
@x,
@xs') →
@xs'mod(
@x,
@y) →
-(
@x,
*'(
@x,
div(
@x,
@y)))
#add(
#0,
@y) →
@y#add(
#neg(
#s(
#0)),
@y) →
#pred(
@y)
#add(
#neg(
#s(
#s(
@x))),
@y) →
#pred(
#add(
#pos(
#s(
@x)),
@y))
#add(
#pos(
#s(
#0)),
@y) →
#succ(
@y)
#add(
#pos(
#s(
#s(
@x))),
@y) →
#succ(
#add(
#pos(
#s(
@x)),
@y))
#and(
#false,
#false) →
#false#and(
#false,
#true) →
#false#and(
#true,
#false) →
#false#and(
#true,
#true) →
#true#div(
#0,
#0) →
#divByZero#div(
#0,
#neg(
@y)) →
#0#div(
#0,
#pos(
@y)) →
#0#div(
#neg(
@x),
#0) →
#divByZero#div(
#neg(
@x),
#neg(
@y)) →
#pos(
#natdiv(
@x,
@y))
#div(
#neg(
@x),
#pos(
@y)) →
#neg(
#natdiv(
@x,
@y))
#div(
#pos(
@x),
#0) →
#divByZero#div(
#pos(
@x),
#neg(
@y)) →
#neg(
#natdiv(
@x,
@y))
#div(
#pos(
@x),
#pos(
@y)) →
#pos(
#natdiv(
@x,
@y))
#eq(
#0,
#0) →
#true#eq(
#0,
#neg(
@y)) →
#false#eq(
#0,
#pos(
@y)) →
#false#eq(
#0,
#s(
@y)) →
#false#eq(
#neg(
@x),
#0) →
#false#eq(
#neg(
@x),
#neg(
@y)) →
#eq(
@x,
@y)
#eq(
#neg(
@x),
#pos(
@y)) →
#false#eq(
#pos(
@x),
#0) →
#false#eq(
#pos(
@x),
#neg(
@y)) →
#false#eq(
#pos(
@x),
#pos(
@y)) →
#eq(
@x,
@y)
#eq(
#s(
@x),
#0) →
#false#eq(
#s(
@x),
#s(
@y)) →
#eq(
@x,
@y)
#eq(
::(
@x_1,
@x_2),
::(
@y_1,
@y_2)) →
#and(
#eq(
@x_1,
@y_1),
#eq(
@x_2,
@y_2))
#eq(
::(
@x_1,
@x_2),
nil) →
#false#eq(
nil,
::(
@y_1,
@y_2)) →
#false#eq(
nil,
nil) →
#true#mult(
#0,
#0) →
#0#mult(
#0,
#neg(
@y)) →
#0#mult(
#0,
#pos(
@y)) →
#0#mult(
#neg(
@x),
#0) →
#0#mult(
#neg(
@x),
#neg(
@y)) →
#pos(
#natmult(
@x,
@y))
#mult(
#neg(
@x),
#pos(
@y)) →
#neg(
#natmult(
@x,
@y))
#mult(
#pos(
@x),
#0) →
#0#mult(
#pos(
@x),
#neg(
@y)) →
#neg(
#natmult(
@x,
@y))
#mult(
#pos(
@x),
#pos(
@y)) →
#pos(
#natmult(
@x,
@y))
#natdiv(
#0,
#0) →
#divByZero#natdiv(
#s(
@x),
#s(
@y)) →
#s(
#natdiv(
#natsub(
@x,
@y),
#s(
@y)))
#natmult(
#0,
@y) →
#0#natmult(
#s(
@x),
@y) →
#add(
#pos(
@y),
#natmult(
@x,
@y))
#natsub(
@x,
#0) →
@x#natsub(
#s(
@x),
#s(
@y)) →
#natsub(
@x,
@y)
#pred(
#0) →
#neg(
#s(
#0))
#pred(
#neg(
#s(
@x))) →
#neg(
#s(
#s(
@x)))
#pred(
#pos(
#s(
#0))) →
#0#pred(
#pos(
#s(
#s(
@x)))) →
#pos(
#s(
@x))
#sub(
@x,
#0) →
@x#sub(
@x,
#neg(
@y)) →
#add(
@x,
#pos(
@y))
#sub(
@x,
#pos(
@y)) →
#add(
@x,
#neg(
@y))
#succ(
#0) →
#pos(
#s(
#0))
#succ(
#neg(
#s(
#0))) →
#0#succ(
#neg(
#s(
#s(
@x)))) →
#neg(
#s(
@x))
#succ(
#pos(
#s(
@x))) →
#pos(
#s(
#s(
@x)))
Types:
#equal :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → #false:#true
#eq :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → #false:#true
*' :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#mult :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
- :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#sub :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
div :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#div :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
eratos :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
eratos#1 :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
:: :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
filter :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
nil :: :::nil:#0:#s:#neg:#pos:#divByZero
filter#1 :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
filter#2 :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
filter#3 :: #false:#true → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
mod :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#0 :: :::nil:#0:#s:#neg:#pos:#divByZero
#false :: #false:#true
#true :: #false:#true
#add :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#neg :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#s :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#pred :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#pos :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#succ :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#and :: #false:#true → #false:#true → #false:#true
#divByZero :: :::nil:#0:#s:#neg:#pos:#divByZero
#natdiv :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#natmult :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#natsub :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
hole_#false:#true1_4 :: #false:#true
hole_:::nil:#0:#s:#neg:#pos:#divByZero2_4 :: :::nil:#0:#s:#neg:#pos:#divByZero
gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4 :: Nat → :::nil:#0:#s:#neg:#pos:#divByZero
Lemmas:
#eq(gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(+(1, n5_4)), gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(n5_4)) → #false, rt ∈ Ω(0)
Generator Equations:
gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(0) ⇔ nil
gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(+(x, 1)) ⇔ ::(nil, gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(x))
The following defined symbols remain to be analysed:
filter#1, eratos, eratos#1, filter
They will be analysed ascendingly in the following order:
eratos = eratos#1
filter < eratos#1
filter = filter#1
(18) RewriteLemmaProof (LOWER BOUND(ID) transformation)
Proved the following rewrite lemma:
filter#1(
gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(
+(
1,
n6575021_4)),
gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(
b)) →
*4_4, rt ∈ Ω(n6575021
4)
Induction Base:
filter#1(gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(+(1, 0)), gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(b))
Induction Step:
filter#1(gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(+(1, +(n6575021_4, 1))), gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(b)) →RΩ(1)
filter#2(filter(gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(b), gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(+(1, n6575021_4))), gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(b), nil) →RΩ(1)
filter#2(filter#1(gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(+(1, n6575021_4)), gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(b)), gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(b), nil) →IH
filter#2(*4_4, gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(b), nil)
We have rt ∈ Ω(n1) and sz ∈ O(n). Thus, we have ircR ∈ Ω(n).
(19) Complex Obligation (BEST)
(20) Obligation:
Innermost TRS:
Rules:
#equal(
@x,
@y) →
#eq(
@x,
@y)
*'(
@x,
@y) →
#mult(
@x,
@y)
-(
@x,
@y) →
#sub(
@x,
@y)
div(
@x,
@y) →
#div(
@x,
@y)
eratos(
@l) →
eratos#1(
@l)
eratos#1(
::(
@x,
@xs)) →
::(
@x,
eratos(
filter(
@x,
@xs)))
eratos#1(
nil) →
nilfilter(
@p,
@l) →
filter#1(
@l,
@p)
filter#1(
::(
@x,
@xs),
@p) →
filter#2(
filter(
@p,
@xs),
@p,
@x)
filter#1(
nil,
@p) →
nilfilter#2(
@xs',
@p,
@x) →
filter#3(
#equal(
mod(
@x,
@p),
#0),
@x,
@xs')
filter#3(
#false,
@x,
@xs') →
::(
@x,
@xs')
filter#3(
#true,
@x,
@xs') →
@xs'mod(
@x,
@y) →
-(
@x,
*'(
@x,
div(
@x,
@y)))
#add(
#0,
@y) →
@y#add(
#neg(
#s(
#0)),
@y) →
#pred(
@y)
#add(
#neg(
#s(
#s(
@x))),
@y) →
#pred(
#add(
#pos(
#s(
@x)),
@y))
#add(
#pos(
#s(
#0)),
@y) →
#succ(
@y)
#add(
#pos(
#s(
#s(
@x))),
@y) →
#succ(
#add(
#pos(
#s(
@x)),
@y))
#and(
#false,
#false) →
#false#and(
#false,
#true) →
#false#and(
#true,
#false) →
#false#and(
#true,
#true) →
#true#div(
#0,
#0) →
#divByZero#div(
#0,
#neg(
@y)) →
#0#div(
#0,
#pos(
@y)) →
#0#div(
#neg(
@x),
#0) →
#divByZero#div(
#neg(
@x),
#neg(
@y)) →
#pos(
#natdiv(
@x,
@y))
#div(
#neg(
@x),
#pos(
@y)) →
#neg(
#natdiv(
@x,
@y))
#div(
#pos(
@x),
#0) →
#divByZero#div(
#pos(
@x),
#neg(
@y)) →
#neg(
#natdiv(
@x,
@y))
#div(
#pos(
@x),
#pos(
@y)) →
#pos(
#natdiv(
@x,
@y))
#eq(
#0,
#0) →
#true#eq(
#0,
#neg(
@y)) →
#false#eq(
#0,
#pos(
@y)) →
#false#eq(
#0,
#s(
@y)) →
#false#eq(
#neg(
@x),
#0) →
#false#eq(
#neg(
@x),
#neg(
@y)) →
#eq(
@x,
@y)
#eq(
#neg(
@x),
#pos(
@y)) →
#false#eq(
#pos(
@x),
#0) →
#false#eq(
#pos(
@x),
#neg(
@y)) →
#false#eq(
#pos(
@x),
#pos(
@y)) →
#eq(
@x,
@y)
#eq(
#s(
@x),
#0) →
#false#eq(
#s(
@x),
#s(
@y)) →
#eq(
@x,
@y)
#eq(
::(
@x_1,
@x_2),
::(
@y_1,
@y_2)) →
#and(
#eq(
@x_1,
@y_1),
#eq(
@x_2,
@y_2))
#eq(
::(
@x_1,
@x_2),
nil) →
#false#eq(
nil,
::(
@y_1,
@y_2)) →
#false#eq(
nil,
nil) →
#true#mult(
#0,
#0) →
#0#mult(
#0,
#neg(
@y)) →
#0#mult(
#0,
#pos(
@y)) →
#0#mult(
#neg(
@x),
#0) →
#0#mult(
#neg(
@x),
#neg(
@y)) →
#pos(
#natmult(
@x,
@y))
#mult(
#neg(
@x),
#pos(
@y)) →
#neg(
#natmult(
@x,
@y))
#mult(
#pos(
@x),
#0) →
#0#mult(
#pos(
@x),
#neg(
@y)) →
#neg(
#natmult(
@x,
@y))
#mult(
#pos(
@x),
#pos(
@y)) →
#pos(
#natmult(
@x,
@y))
#natdiv(
#0,
#0) →
#divByZero#natdiv(
#s(
@x),
#s(
@y)) →
#s(
#natdiv(
#natsub(
@x,
@y),
#s(
@y)))
#natmult(
#0,
@y) →
#0#natmult(
#s(
@x),
@y) →
#add(
#pos(
@y),
#natmult(
@x,
@y))
#natsub(
@x,
#0) →
@x#natsub(
#s(
@x),
#s(
@y)) →
#natsub(
@x,
@y)
#pred(
#0) →
#neg(
#s(
#0))
#pred(
#neg(
#s(
@x))) →
#neg(
#s(
#s(
@x)))
#pred(
#pos(
#s(
#0))) →
#0#pred(
#pos(
#s(
#s(
@x)))) →
#pos(
#s(
@x))
#sub(
@x,
#0) →
@x#sub(
@x,
#neg(
@y)) →
#add(
@x,
#pos(
@y))
#sub(
@x,
#pos(
@y)) →
#add(
@x,
#neg(
@y))
#succ(
#0) →
#pos(
#s(
#0))
#succ(
#neg(
#s(
#0))) →
#0#succ(
#neg(
#s(
#s(
@x)))) →
#neg(
#s(
@x))
#succ(
#pos(
#s(
@x))) →
#pos(
#s(
#s(
@x)))
Types:
#equal :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → #false:#true
#eq :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → #false:#true
*' :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#mult :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
- :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#sub :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
div :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#div :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
eratos :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
eratos#1 :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
:: :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
filter :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
nil :: :::nil:#0:#s:#neg:#pos:#divByZero
filter#1 :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
filter#2 :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
filter#3 :: #false:#true → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
mod :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#0 :: :::nil:#0:#s:#neg:#pos:#divByZero
#false :: #false:#true
#true :: #false:#true
#add :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#neg :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#s :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#pred :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#pos :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#succ :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#and :: #false:#true → #false:#true → #false:#true
#divByZero :: :::nil:#0:#s:#neg:#pos:#divByZero
#natdiv :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#natmult :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#natsub :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
hole_#false:#true1_4 :: #false:#true
hole_:::nil:#0:#s:#neg:#pos:#divByZero2_4 :: :::nil:#0:#s:#neg:#pos:#divByZero
gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4 :: Nat → :::nil:#0:#s:#neg:#pos:#divByZero
Lemmas:
#eq(gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(+(1, n5_4)), gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(n5_4)) → #false, rt ∈ Ω(0)
filter#1(gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(+(1, n6575021_4)), gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(b)) → *4_4, rt ∈ Ω(n65750214)
Generator Equations:
gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(0) ⇔ nil
gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(+(x, 1)) ⇔ ::(nil, gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(x))
The following defined symbols remain to be analysed:
filter, eratos, eratos#1
They will be analysed ascendingly in the following order:
eratos = eratos#1
filter < eratos#1
filter = filter#1
(21) RewriteLemmaProof (LOWER BOUND(ID) transformation)
Proved the following rewrite lemma:
filter(
gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(
a),
gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(
n8693630_4)) →
*4_4, rt ∈ Ω(n8693630
4)
Induction Base:
filter(gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(a), gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(0))
Induction Step:
filter(gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(a), gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(+(n8693630_4, 1))) →RΩ(1)
filter#1(gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(+(n8693630_4, 1)), gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(a)) →RΩ(1)
filter#2(filter(gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(a), gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(n8693630_4)), gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(a), nil) →IH
filter#2(*4_4, gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(a), nil)
We have rt ∈ Ω(n1) and sz ∈ O(n). Thus, we have ircR ∈ Ω(n).
(22) Complex Obligation (BEST)
(23) Obligation:
Innermost TRS:
Rules:
#equal(
@x,
@y) →
#eq(
@x,
@y)
*'(
@x,
@y) →
#mult(
@x,
@y)
-(
@x,
@y) →
#sub(
@x,
@y)
div(
@x,
@y) →
#div(
@x,
@y)
eratos(
@l) →
eratos#1(
@l)
eratos#1(
::(
@x,
@xs)) →
::(
@x,
eratos(
filter(
@x,
@xs)))
eratos#1(
nil) →
nilfilter(
@p,
@l) →
filter#1(
@l,
@p)
filter#1(
::(
@x,
@xs),
@p) →
filter#2(
filter(
@p,
@xs),
@p,
@x)
filter#1(
nil,
@p) →
nilfilter#2(
@xs',
@p,
@x) →
filter#3(
#equal(
mod(
@x,
@p),
#0),
@x,
@xs')
filter#3(
#false,
@x,
@xs') →
::(
@x,
@xs')
filter#3(
#true,
@x,
@xs') →
@xs'mod(
@x,
@y) →
-(
@x,
*'(
@x,
div(
@x,
@y)))
#add(
#0,
@y) →
@y#add(
#neg(
#s(
#0)),
@y) →
#pred(
@y)
#add(
#neg(
#s(
#s(
@x))),
@y) →
#pred(
#add(
#pos(
#s(
@x)),
@y))
#add(
#pos(
#s(
#0)),
@y) →
#succ(
@y)
#add(
#pos(
#s(
#s(
@x))),
@y) →
#succ(
#add(
#pos(
#s(
@x)),
@y))
#and(
#false,
#false) →
#false#and(
#false,
#true) →
#false#and(
#true,
#false) →
#false#and(
#true,
#true) →
#true#div(
#0,
#0) →
#divByZero#div(
#0,
#neg(
@y)) →
#0#div(
#0,
#pos(
@y)) →
#0#div(
#neg(
@x),
#0) →
#divByZero#div(
#neg(
@x),
#neg(
@y)) →
#pos(
#natdiv(
@x,
@y))
#div(
#neg(
@x),
#pos(
@y)) →
#neg(
#natdiv(
@x,
@y))
#div(
#pos(
@x),
#0) →
#divByZero#div(
#pos(
@x),
#neg(
@y)) →
#neg(
#natdiv(
@x,
@y))
#div(
#pos(
@x),
#pos(
@y)) →
#pos(
#natdiv(
@x,
@y))
#eq(
#0,
#0) →
#true#eq(
#0,
#neg(
@y)) →
#false#eq(
#0,
#pos(
@y)) →
#false#eq(
#0,
#s(
@y)) →
#false#eq(
#neg(
@x),
#0) →
#false#eq(
#neg(
@x),
#neg(
@y)) →
#eq(
@x,
@y)
#eq(
#neg(
@x),
#pos(
@y)) →
#false#eq(
#pos(
@x),
#0) →
#false#eq(
#pos(
@x),
#neg(
@y)) →
#false#eq(
#pos(
@x),
#pos(
@y)) →
#eq(
@x,
@y)
#eq(
#s(
@x),
#0) →
#false#eq(
#s(
@x),
#s(
@y)) →
#eq(
@x,
@y)
#eq(
::(
@x_1,
@x_2),
::(
@y_1,
@y_2)) →
#and(
#eq(
@x_1,
@y_1),
#eq(
@x_2,
@y_2))
#eq(
::(
@x_1,
@x_2),
nil) →
#false#eq(
nil,
::(
@y_1,
@y_2)) →
#false#eq(
nil,
nil) →
#true#mult(
#0,
#0) →
#0#mult(
#0,
#neg(
@y)) →
#0#mult(
#0,
#pos(
@y)) →
#0#mult(
#neg(
@x),
#0) →
#0#mult(
#neg(
@x),
#neg(
@y)) →
#pos(
#natmult(
@x,
@y))
#mult(
#neg(
@x),
#pos(
@y)) →
#neg(
#natmult(
@x,
@y))
#mult(
#pos(
@x),
#0) →
#0#mult(
#pos(
@x),
#neg(
@y)) →
#neg(
#natmult(
@x,
@y))
#mult(
#pos(
@x),
#pos(
@y)) →
#pos(
#natmult(
@x,
@y))
#natdiv(
#0,
#0) →
#divByZero#natdiv(
#s(
@x),
#s(
@y)) →
#s(
#natdiv(
#natsub(
@x,
@y),
#s(
@y)))
#natmult(
#0,
@y) →
#0#natmult(
#s(
@x),
@y) →
#add(
#pos(
@y),
#natmult(
@x,
@y))
#natsub(
@x,
#0) →
@x#natsub(
#s(
@x),
#s(
@y)) →
#natsub(
@x,
@y)
#pred(
#0) →
#neg(
#s(
#0))
#pred(
#neg(
#s(
@x))) →
#neg(
#s(
#s(
@x)))
#pred(
#pos(
#s(
#0))) →
#0#pred(
#pos(
#s(
#s(
@x)))) →
#pos(
#s(
@x))
#sub(
@x,
#0) →
@x#sub(
@x,
#neg(
@y)) →
#add(
@x,
#pos(
@y))
#sub(
@x,
#pos(
@y)) →
#add(
@x,
#neg(
@y))
#succ(
#0) →
#pos(
#s(
#0))
#succ(
#neg(
#s(
#0))) →
#0#succ(
#neg(
#s(
#s(
@x)))) →
#neg(
#s(
@x))
#succ(
#pos(
#s(
@x))) →
#pos(
#s(
#s(
@x)))
Types:
#equal :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → #false:#true
#eq :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → #false:#true
*' :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#mult :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
- :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#sub :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
div :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#div :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
eratos :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
eratos#1 :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
:: :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
filter :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
nil :: :::nil:#0:#s:#neg:#pos:#divByZero
filter#1 :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
filter#2 :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
filter#3 :: #false:#true → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
mod :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#0 :: :::nil:#0:#s:#neg:#pos:#divByZero
#false :: #false:#true
#true :: #false:#true
#add :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#neg :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#s :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#pred :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#pos :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#succ :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#and :: #false:#true → #false:#true → #false:#true
#divByZero :: :::nil:#0:#s:#neg:#pos:#divByZero
#natdiv :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#natmult :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#natsub :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
hole_#false:#true1_4 :: #false:#true
hole_:::nil:#0:#s:#neg:#pos:#divByZero2_4 :: :::nil:#0:#s:#neg:#pos:#divByZero
gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4 :: Nat → :::nil:#0:#s:#neg:#pos:#divByZero
Lemmas:
#eq(gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(+(1, n5_4)), gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(n5_4)) → #false, rt ∈ Ω(0)
filter#1(gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(+(1, n6575021_4)), gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(b)) → *4_4, rt ∈ Ω(n65750214)
filter(gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(a), gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(n8693630_4)) → *4_4, rt ∈ Ω(n86936304)
Generator Equations:
gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(0) ⇔ nil
gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(+(x, 1)) ⇔ ::(nil, gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(x))
The following defined symbols remain to be analysed:
filter#1, eratos, eratos#1
They will be analysed ascendingly in the following order:
eratos = eratos#1
filter < eratos#1
filter = filter#1
(24) RewriteLemmaProof (LOWER BOUND(ID) transformation)
Proved the following rewrite lemma:
filter#1(
gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(
+(
1,
n10757229_4)),
gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(
b)) →
*4_4, rt ∈ Ω(n10757229
4)
Induction Base:
filter#1(gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(+(1, 0)), gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(b))
Induction Step:
filter#1(gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(+(1, +(n10757229_4, 1))), gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(b)) →RΩ(1)
filter#2(filter(gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(b), gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(+(1, n10757229_4))), gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(b), nil) →RΩ(1)
filter#2(filter#1(gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(+(1, n10757229_4)), gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(b)), gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(b), nil) →IH
filter#2(*4_4, gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(b), nil)
We have rt ∈ Ω(n1) and sz ∈ O(n). Thus, we have ircR ∈ Ω(n).
(25) Complex Obligation (BEST)
(26) Obligation:
Innermost TRS:
Rules:
#equal(
@x,
@y) →
#eq(
@x,
@y)
*'(
@x,
@y) →
#mult(
@x,
@y)
-(
@x,
@y) →
#sub(
@x,
@y)
div(
@x,
@y) →
#div(
@x,
@y)
eratos(
@l) →
eratos#1(
@l)
eratos#1(
::(
@x,
@xs)) →
::(
@x,
eratos(
filter(
@x,
@xs)))
eratos#1(
nil) →
nilfilter(
@p,
@l) →
filter#1(
@l,
@p)
filter#1(
::(
@x,
@xs),
@p) →
filter#2(
filter(
@p,
@xs),
@p,
@x)
filter#1(
nil,
@p) →
nilfilter#2(
@xs',
@p,
@x) →
filter#3(
#equal(
mod(
@x,
@p),
#0),
@x,
@xs')
filter#3(
#false,
@x,
@xs') →
::(
@x,
@xs')
filter#3(
#true,
@x,
@xs') →
@xs'mod(
@x,
@y) →
-(
@x,
*'(
@x,
div(
@x,
@y)))
#add(
#0,
@y) →
@y#add(
#neg(
#s(
#0)),
@y) →
#pred(
@y)
#add(
#neg(
#s(
#s(
@x))),
@y) →
#pred(
#add(
#pos(
#s(
@x)),
@y))
#add(
#pos(
#s(
#0)),
@y) →
#succ(
@y)
#add(
#pos(
#s(
#s(
@x))),
@y) →
#succ(
#add(
#pos(
#s(
@x)),
@y))
#and(
#false,
#false) →
#false#and(
#false,
#true) →
#false#and(
#true,
#false) →
#false#and(
#true,
#true) →
#true#div(
#0,
#0) →
#divByZero#div(
#0,
#neg(
@y)) →
#0#div(
#0,
#pos(
@y)) →
#0#div(
#neg(
@x),
#0) →
#divByZero#div(
#neg(
@x),
#neg(
@y)) →
#pos(
#natdiv(
@x,
@y))
#div(
#neg(
@x),
#pos(
@y)) →
#neg(
#natdiv(
@x,
@y))
#div(
#pos(
@x),
#0) →
#divByZero#div(
#pos(
@x),
#neg(
@y)) →
#neg(
#natdiv(
@x,
@y))
#div(
#pos(
@x),
#pos(
@y)) →
#pos(
#natdiv(
@x,
@y))
#eq(
#0,
#0) →
#true#eq(
#0,
#neg(
@y)) →
#false#eq(
#0,
#pos(
@y)) →
#false#eq(
#0,
#s(
@y)) →
#false#eq(
#neg(
@x),
#0) →
#false#eq(
#neg(
@x),
#neg(
@y)) →
#eq(
@x,
@y)
#eq(
#neg(
@x),
#pos(
@y)) →
#false#eq(
#pos(
@x),
#0) →
#false#eq(
#pos(
@x),
#neg(
@y)) →
#false#eq(
#pos(
@x),
#pos(
@y)) →
#eq(
@x,
@y)
#eq(
#s(
@x),
#0) →
#false#eq(
#s(
@x),
#s(
@y)) →
#eq(
@x,
@y)
#eq(
::(
@x_1,
@x_2),
::(
@y_1,
@y_2)) →
#and(
#eq(
@x_1,
@y_1),
#eq(
@x_2,
@y_2))
#eq(
::(
@x_1,
@x_2),
nil) →
#false#eq(
nil,
::(
@y_1,
@y_2)) →
#false#eq(
nil,
nil) →
#true#mult(
#0,
#0) →
#0#mult(
#0,
#neg(
@y)) →
#0#mult(
#0,
#pos(
@y)) →
#0#mult(
#neg(
@x),
#0) →
#0#mult(
#neg(
@x),
#neg(
@y)) →
#pos(
#natmult(
@x,
@y))
#mult(
#neg(
@x),
#pos(
@y)) →
#neg(
#natmult(
@x,
@y))
#mult(
#pos(
@x),
#0) →
#0#mult(
#pos(
@x),
#neg(
@y)) →
#neg(
#natmult(
@x,
@y))
#mult(
#pos(
@x),
#pos(
@y)) →
#pos(
#natmult(
@x,
@y))
#natdiv(
#0,
#0) →
#divByZero#natdiv(
#s(
@x),
#s(
@y)) →
#s(
#natdiv(
#natsub(
@x,
@y),
#s(
@y)))
#natmult(
#0,
@y) →
#0#natmult(
#s(
@x),
@y) →
#add(
#pos(
@y),
#natmult(
@x,
@y))
#natsub(
@x,
#0) →
@x#natsub(
#s(
@x),
#s(
@y)) →
#natsub(
@x,
@y)
#pred(
#0) →
#neg(
#s(
#0))
#pred(
#neg(
#s(
@x))) →
#neg(
#s(
#s(
@x)))
#pred(
#pos(
#s(
#0))) →
#0#pred(
#pos(
#s(
#s(
@x)))) →
#pos(
#s(
@x))
#sub(
@x,
#0) →
@x#sub(
@x,
#neg(
@y)) →
#add(
@x,
#pos(
@y))
#sub(
@x,
#pos(
@y)) →
#add(
@x,
#neg(
@y))
#succ(
#0) →
#pos(
#s(
#0))
#succ(
#neg(
#s(
#0))) →
#0#succ(
#neg(
#s(
#s(
@x)))) →
#neg(
#s(
@x))
#succ(
#pos(
#s(
@x))) →
#pos(
#s(
#s(
@x)))
Types:
#equal :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → #false:#true
#eq :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → #false:#true
*' :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#mult :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
- :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#sub :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
div :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#div :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
eratos :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
eratos#1 :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
:: :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
filter :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
nil :: :::nil:#0:#s:#neg:#pos:#divByZero
filter#1 :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
filter#2 :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
filter#3 :: #false:#true → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
mod :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#0 :: :::nil:#0:#s:#neg:#pos:#divByZero
#false :: #false:#true
#true :: #false:#true
#add :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#neg :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#s :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#pred :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#pos :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#succ :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#and :: #false:#true → #false:#true → #false:#true
#divByZero :: :::nil:#0:#s:#neg:#pos:#divByZero
#natdiv :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#natmult :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#natsub :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
hole_#false:#true1_4 :: #false:#true
hole_:::nil:#0:#s:#neg:#pos:#divByZero2_4 :: :::nil:#0:#s:#neg:#pos:#divByZero
gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4 :: Nat → :::nil:#0:#s:#neg:#pos:#divByZero
Lemmas:
#eq(gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(+(1, n5_4)), gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(n5_4)) → #false, rt ∈ Ω(0)
filter#1(gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(+(1, n10757229_4)), gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(b)) → *4_4, rt ∈ Ω(n107572294)
filter(gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(a), gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(n8693630_4)) → *4_4, rt ∈ Ω(n86936304)
Generator Equations:
gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(0) ⇔ nil
gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(+(x, 1)) ⇔ ::(nil, gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(x))
The following defined symbols remain to be analysed:
eratos#1, eratos
They will be analysed ascendingly in the following order:
eratos = eratos#1
(27) NoRewriteLemmaProof (LOWER BOUND(ID) transformation)
Could not prove a rewrite lemma for the defined symbol eratos#1.
(28) Obligation:
Innermost TRS:
Rules:
#equal(
@x,
@y) →
#eq(
@x,
@y)
*'(
@x,
@y) →
#mult(
@x,
@y)
-(
@x,
@y) →
#sub(
@x,
@y)
div(
@x,
@y) →
#div(
@x,
@y)
eratos(
@l) →
eratos#1(
@l)
eratos#1(
::(
@x,
@xs)) →
::(
@x,
eratos(
filter(
@x,
@xs)))
eratos#1(
nil) →
nilfilter(
@p,
@l) →
filter#1(
@l,
@p)
filter#1(
::(
@x,
@xs),
@p) →
filter#2(
filter(
@p,
@xs),
@p,
@x)
filter#1(
nil,
@p) →
nilfilter#2(
@xs',
@p,
@x) →
filter#3(
#equal(
mod(
@x,
@p),
#0),
@x,
@xs')
filter#3(
#false,
@x,
@xs') →
::(
@x,
@xs')
filter#3(
#true,
@x,
@xs') →
@xs'mod(
@x,
@y) →
-(
@x,
*'(
@x,
div(
@x,
@y)))
#add(
#0,
@y) →
@y#add(
#neg(
#s(
#0)),
@y) →
#pred(
@y)
#add(
#neg(
#s(
#s(
@x))),
@y) →
#pred(
#add(
#pos(
#s(
@x)),
@y))
#add(
#pos(
#s(
#0)),
@y) →
#succ(
@y)
#add(
#pos(
#s(
#s(
@x))),
@y) →
#succ(
#add(
#pos(
#s(
@x)),
@y))
#and(
#false,
#false) →
#false#and(
#false,
#true) →
#false#and(
#true,
#false) →
#false#and(
#true,
#true) →
#true#div(
#0,
#0) →
#divByZero#div(
#0,
#neg(
@y)) →
#0#div(
#0,
#pos(
@y)) →
#0#div(
#neg(
@x),
#0) →
#divByZero#div(
#neg(
@x),
#neg(
@y)) →
#pos(
#natdiv(
@x,
@y))
#div(
#neg(
@x),
#pos(
@y)) →
#neg(
#natdiv(
@x,
@y))
#div(
#pos(
@x),
#0) →
#divByZero#div(
#pos(
@x),
#neg(
@y)) →
#neg(
#natdiv(
@x,
@y))
#div(
#pos(
@x),
#pos(
@y)) →
#pos(
#natdiv(
@x,
@y))
#eq(
#0,
#0) →
#true#eq(
#0,
#neg(
@y)) →
#false#eq(
#0,
#pos(
@y)) →
#false#eq(
#0,
#s(
@y)) →
#false#eq(
#neg(
@x),
#0) →
#false#eq(
#neg(
@x),
#neg(
@y)) →
#eq(
@x,
@y)
#eq(
#neg(
@x),
#pos(
@y)) →
#false#eq(
#pos(
@x),
#0) →
#false#eq(
#pos(
@x),
#neg(
@y)) →
#false#eq(
#pos(
@x),
#pos(
@y)) →
#eq(
@x,
@y)
#eq(
#s(
@x),
#0) →
#false#eq(
#s(
@x),
#s(
@y)) →
#eq(
@x,
@y)
#eq(
::(
@x_1,
@x_2),
::(
@y_1,
@y_2)) →
#and(
#eq(
@x_1,
@y_1),
#eq(
@x_2,
@y_2))
#eq(
::(
@x_1,
@x_2),
nil) →
#false#eq(
nil,
::(
@y_1,
@y_2)) →
#false#eq(
nil,
nil) →
#true#mult(
#0,
#0) →
#0#mult(
#0,
#neg(
@y)) →
#0#mult(
#0,
#pos(
@y)) →
#0#mult(
#neg(
@x),
#0) →
#0#mult(
#neg(
@x),
#neg(
@y)) →
#pos(
#natmult(
@x,
@y))
#mult(
#neg(
@x),
#pos(
@y)) →
#neg(
#natmult(
@x,
@y))
#mult(
#pos(
@x),
#0) →
#0#mult(
#pos(
@x),
#neg(
@y)) →
#neg(
#natmult(
@x,
@y))
#mult(
#pos(
@x),
#pos(
@y)) →
#pos(
#natmult(
@x,
@y))
#natdiv(
#0,
#0) →
#divByZero#natdiv(
#s(
@x),
#s(
@y)) →
#s(
#natdiv(
#natsub(
@x,
@y),
#s(
@y)))
#natmult(
#0,
@y) →
#0#natmult(
#s(
@x),
@y) →
#add(
#pos(
@y),
#natmult(
@x,
@y))
#natsub(
@x,
#0) →
@x#natsub(
#s(
@x),
#s(
@y)) →
#natsub(
@x,
@y)
#pred(
#0) →
#neg(
#s(
#0))
#pred(
#neg(
#s(
@x))) →
#neg(
#s(
#s(
@x)))
#pred(
#pos(
#s(
#0))) →
#0#pred(
#pos(
#s(
#s(
@x)))) →
#pos(
#s(
@x))
#sub(
@x,
#0) →
@x#sub(
@x,
#neg(
@y)) →
#add(
@x,
#pos(
@y))
#sub(
@x,
#pos(
@y)) →
#add(
@x,
#neg(
@y))
#succ(
#0) →
#pos(
#s(
#0))
#succ(
#neg(
#s(
#0))) →
#0#succ(
#neg(
#s(
#s(
@x)))) →
#neg(
#s(
@x))
#succ(
#pos(
#s(
@x))) →
#pos(
#s(
#s(
@x)))
Types:
#equal :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → #false:#true
#eq :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → #false:#true
*' :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#mult :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
- :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#sub :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
div :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#div :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
eratos :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
eratos#1 :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
:: :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
filter :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
nil :: :::nil:#0:#s:#neg:#pos:#divByZero
filter#1 :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
filter#2 :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
filter#3 :: #false:#true → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
mod :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#0 :: :::nil:#0:#s:#neg:#pos:#divByZero
#false :: #false:#true
#true :: #false:#true
#add :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#neg :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#s :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#pred :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#pos :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#succ :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#and :: #false:#true → #false:#true → #false:#true
#divByZero :: :::nil:#0:#s:#neg:#pos:#divByZero
#natdiv :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#natmult :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#natsub :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
hole_#false:#true1_4 :: #false:#true
hole_:::nil:#0:#s:#neg:#pos:#divByZero2_4 :: :::nil:#0:#s:#neg:#pos:#divByZero
gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4 :: Nat → :::nil:#0:#s:#neg:#pos:#divByZero
Lemmas:
#eq(gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(+(1, n5_4)), gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(n5_4)) → #false, rt ∈ Ω(0)
filter#1(gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(+(1, n10757229_4)), gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(b)) → *4_4, rt ∈ Ω(n107572294)
filter(gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(a), gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(n8693630_4)) → *4_4, rt ∈ Ω(n86936304)
Generator Equations:
gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(0) ⇔ nil
gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(+(x, 1)) ⇔ ::(nil, gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(x))
The following defined symbols remain to be analysed:
eratos
They will be analysed ascendingly in the following order:
eratos = eratos#1
(29) NoRewriteLemmaProof (LOWER BOUND(ID) transformation)
Could not prove a rewrite lemma for the defined symbol eratos.
(30) Obligation:
Innermost TRS:
Rules:
#equal(
@x,
@y) →
#eq(
@x,
@y)
*'(
@x,
@y) →
#mult(
@x,
@y)
-(
@x,
@y) →
#sub(
@x,
@y)
div(
@x,
@y) →
#div(
@x,
@y)
eratos(
@l) →
eratos#1(
@l)
eratos#1(
::(
@x,
@xs)) →
::(
@x,
eratos(
filter(
@x,
@xs)))
eratos#1(
nil) →
nilfilter(
@p,
@l) →
filter#1(
@l,
@p)
filter#1(
::(
@x,
@xs),
@p) →
filter#2(
filter(
@p,
@xs),
@p,
@x)
filter#1(
nil,
@p) →
nilfilter#2(
@xs',
@p,
@x) →
filter#3(
#equal(
mod(
@x,
@p),
#0),
@x,
@xs')
filter#3(
#false,
@x,
@xs') →
::(
@x,
@xs')
filter#3(
#true,
@x,
@xs') →
@xs'mod(
@x,
@y) →
-(
@x,
*'(
@x,
div(
@x,
@y)))
#add(
#0,
@y) →
@y#add(
#neg(
#s(
#0)),
@y) →
#pred(
@y)
#add(
#neg(
#s(
#s(
@x))),
@y) →
#pred(
#add(
#pos(
#s(
@x)),
@y))
#add(
#pos(
#s(
#0)),
@y) →
#succ(
@y)
#add(
#pos(
#s(
#s(
@x))),
@y) →
#succ(
#add(
#pos(
#s(
@x)),
@y))
#and(
#false,
#false) →
#false#and(
#false,
#true) →
#false#and(
#true,
#false) →
#false#and(
#true,
#true) →
#true#div(
#0,
#0) →
#divByZero#div(
#0,
#neg(
@y)) →
#0#div(
#0,
#pos(
@y)) →
#0#div(
#neg(
@x),
#0) →
#divByZero#div(
#neg(
@x),
#neg(
@y)) →
#pos(
#natdiv(
@x,
@y))
#div(
#neg(
@x),
#pos(
@y)) →
#neg(
#natdiv(
@x,
@y))
#div(
#pos(
@x),
#0) →
#divByZero#div(
#pos(
@x),
#neg(
@y)) →
#neg(
#natdiv(
@x,
@y))
#div(
#pos(
@x),
#pos(
@y)) →
#pos(
#natdiv(
@x,
@y))
#eq(
#0,
#0) →
#true#eq(
#0,
#neg(
@y)) →
#false#eq(
#0,
#pos(
@y)) →
#false#eq(
#0,
#s(
@y)) →
#false#eq(
#neg(
@x),
#0) →
#false#eq(
#neg(
@x),
#neg(
@y)) →
#eq(
@x,
@y)
#eq(
#neg(
@x),
#pos(
@y)) →
#false#eq(
#pos(
@x),
#0) →
#false#eq(
#pos(
@x),
#neg(
@y)) →
#false#eq(
#pos(
@x),
#pos(
@y)) →
#eq(
@x,
@y)
#eq(
#s(
@x),
#0) →
#false#eq(
#s(
@x),
#s(
@y)) →
#eq(
@x,
@y)
#eq(
::(
@x_1,
@x_2),
::(
@y_1,
@y_2)) →
#and(
#eq(
@x_1,
@y_1),
#eq(
@x_2,
@y_2))
#eq(
::(
@x_1,
@x_2),
nil) →
#false#eq(
nil,
::(
@y_1,
@y_2)) →
#false#eq(
nil,
nil) →
#true#mult(
#0,
#0) →
#0#mult(
#0,
#neg(
@y)) →
#0#mult(
#0,
#pos(
@y)) →
#0#mult(
#neg(
@x),
#0) →
#0#mult(
#neg(
@x),
#neg(
@y)) →
#pos(
#natmult(
@x,
@y))
#mult(
#neg(
@x),
#pos(
@y)) →
#neg(
#natmult(
@x,
@y))
#mult(
#pos(
@x),
#0) →
#0#mult(
#pos(
@x),
#neg(
@y)) →
#neg(
#natmult(
@x,
@y))
#mult(
#pos(
@x),
#pos(
@y)) →
#pos(
#natmult(
@x,
@y))
#natdiv(
#0,
#0) →
#divByZero#natdiv(
#s(
@x),
#s(
@y)) →
#s(
#natdiv(
#natsub(
@x,
@y),
#s(
@y)))
#natmult(
#0,
@y) →
#0#natmult(
#s(
@x),
@y) →
#add(
#pos(
@y),
#natmult(
@x,
@y))
#natsub(
@x,
#0) →
@x#natsub(
#s(
@x),
#s(
@y)) →
#natsub(
@x,
@y)
#pred(
#0) →
#neg(
#s(
#0))
#pred(
#neg(
#s(
@x))) →
#neg(
#s(
#s(
@x)))
#pred(
#pos(
#s(
#0))) →
#0#pred(
#pos(
#s(
#s(
@x)))) →
#pos(
#s(
@x))
#sub(
@x,
#0) →
@x#sub(
@x,
#neg(
@y)) →
#add(
@x,
#pos(
@y))
#sub(
@x,
#pos(
@y)) →
#add(
@x,
#neg(
@y))
#succ(
#0) →
#pos(
#s(
#0))
#succ(
#neg(
#s(
#0))) →
#0#succ(
#neg(
#s(
#s(
@x)))) →
#neg(
#s(
@x))
#succ(
#pos(
#s(
@x))) →
#pos(
#s(
#s(
@x)))
Types:
#equal :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → #false:#true
#eq :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → #false:#true
*' :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#mult :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
- :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#sub :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
div :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#div :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
eratos :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
eratos#1 :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
:: :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
filter :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
nil :: :::nil:#0:#s:#neg:#pos:#divByZero
filter#1 :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
filter#2 :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
filter#3 :: #false:#true → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
mod :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#0 :: :::nil:#0:#s:#neg:#pos:#divByZero
#false :: #false:#true
#true :: #false:#true
#add :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#neg :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#s :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#pred :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#pos :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#succ :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#and :: #false:#true → #false:#true → #false:#true
#divByZero :: :::nil:#0:#s:#neg:#pos:#divByZero
#natdiv :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#natmult :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#natsub :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
hole_#false:#true1_4 :: #false:#true
hole_:::nil:#0:#s:#neg:#pos:#divByZero2_4 :: :::nil:#0:#s:#neg:#pos:#divByZero
gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4 :: Nat → :::nil:#0:#s:#neg:#pos:#divByZero
Lemmas:
#eq(gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(+(1, n5_4)), gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(n5_4)) → #false, rt ∈ Ω(0)
filter#1(gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(+(1, n10757229_4)), gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(b)) → *4_4, rt ∈ Ω(n107572294)
filter(gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(a), gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(n8693630_4)) → *4_4, rt ∈ Ω(n86936304)
Generator Equations:
gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(0) ⇔ nil
gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(+(x, 1)) ⇔ ::(nil, gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(x))
No more defined symbols left to analyse.
(31) LowerBoundsProof (EQUIVALENT transformation)
The lowerbound Ω(n1) was proven with the following lemma:
filter#1(gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(+(1, n10757229_4)), gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(b)) → *4_4, rt ∈ Ω(n107572294)
(32) BOUNDS(n^1, INF)
(33) Obligation:
Innermost TRS:
Rules:
#equal(
@x,
@y) →
#eq(
@x,
@y)
*'(
@x,
@y) →
#mult(
@x,
@y)
-(
@x,
@y) →
#sub(
@x,
@y)
div(
@x,
@y) →
#div(
@x,
@y)
eratos(
@l) →
eratos#1(
@l)
eratos#1(
::(
@x,
@xs)) →
::(
@x,
eratos(
filter(
@x,
@xs)))
eratos#1(
nil) →
nilfilter(
@p,
@l) →
filter#1(
@l,
@p)
filter#1(
::(
@x,
@xs),
@p) →
filter#2(
filter(
@p,
@xs),
@p,
@x)
filter#1(
nil,
@p) →
nilfilter#2(
@xs',
@p,
@x) →
filter#3(
#equal(
mod(
@x,
@p),
#0),
@x,
@xs')
filter#3(
#false,
@x,
@xs') →
::(
@x,
@xs')
filter#3(
#true,
@x,
@xs') →
@xs'mod(
@x,
@y) →
-(
@x,
*'(
@x,
div(
@x,
@y)))
#add(
#0,
@y) →
@y#add(
#neg(
#s(
#0)),
@y) →
#pred(
@y)
#add(
#neg(
#s(
#s(
@x))),
@y) →
#pred(
#add(
#pos(
#s(
@x)),
@y))
#add(
#pos(
#s(
#0)),
@y) →
#succ(
@y)
#add(
#pos(
#s(
#s(
@x))),
@y) →
#succ(
#add(
#pos(
#s(
@x)),
@y))
#and(
#false,
#false) →
#false#and(
#false,
#true) →
#false#and(
#true,
#false) →
#false#and(
#true,
#true) →
#true#div(
#0,
#0) →
#divByZero#div(
#0,
#neg(
@y)) →
#0#div(
#0,
#pos(
@y)) →
#0#div(
#neg(
@x),
#0) →
#divByZero#div(
#neg(
@x),
#neg(
@y)) →
#pos(
#natdiv(
@x,
@y))
#div(
#neg(
@x),
#pos(
@y)) →
#neg(
#natdiv(
@x,
@y))
#div(
#pos(
@x),
#0) →
#divByZero#div(
#pos(
@x),
#neg(
@y)) →
#neg(
#natdiv(
@x,
@y))
#div(
#pos(
@x),
#pos(
@y)) →
#pos(
#natdiv(
@x,
@y))
#eq(
#0,
#0) →
#true#eq(
#0,
#neg(
@y)) →
#false#eq(
#0,
#pos(
@y)) →
#false#eq(
#0,
#s(
@y)) →
#false#eq(
#neg(
@x),
#0) →
#false#eq(
#neg(
@x),
#neg(
@y)) →
#eq(
@x,
@y)
#eq(
#neg(
@x),
#pos(
@y)) →
#false#eq(
#pos(
@x),
#0) →
#false#eq(
#pos(
@x),
#neg(
@y)) →
#false#eq(
#pos(
@x),
#pos(
@y)) →
#eq(
@x,
@y)
#eq(
#s(
@x),
#0) →
#false#eq(
#s(
@x),
#s(
@y)) →
#eq(
@x,
@y)
#eq(
::(
@x_1,
@x_2),
::(
@y_1,
@y_2)) →
#and(
#eq(
@x_1,
@y_1),
#eq(
@x_2,
@y_2))
#eq(
::(
@x_1,
@x_2),
nil) →
#false#eq(
nil,
::(
@y_1,
@y_2)) →
#false#eq(
nil,
nil) →
#true#mult(
#0,
#0) →
#0#mult(
#0,
#neg(
@y)) →
#0#mult(
#0,
#pos(
@y)) →
#0#mult(
#neg(
@x),
#0) →
#0#mult(
#neg(
@x),
#neg(
@y)) →
#pos(
#natmult(
@x,
@y))
#mult(
#neg(
@x),
#pos(
@y)) →
#neg(
#natmult(
@x,
@y))
#mult(
#pos(
@x),
#0) →
#0#mult(
#pos(
@x),
#neg(
@y)) →
#neg(
#natmult(
@x,
@y))
#mult(
#pos(
@x),
#pos(
@y)) →
#pos(
#natmult(
@x,
@y))
#natdiv(
#0,
#0) →
#divByZero#natdiv(
#s(
@x),
#s(
@y)) →
#s(
#natdiv(
#natsub(
@x,
@y),
#s(
@y)))
#natmult(
#0,
@y) →
#0#natmult(
#s(
@x),
@y) →
#add(
#pos(
@y),
#natmult(
@x,
@y))
#natsub(
@x,
#0) →
@x#natsub(
#s(
@x),
#s(
@y)) →
#natsub(
@x,
@y)
#pred(
#0) →
#neg(
#s(
#0))
#pred(
#neg(
#s(
@x))) →
#neg(
#s(
#s(
@x)))
#pred(
#pos(
#s(
#0))) →
#0#pred(
#pos(
#s(
#s(
@x)))) →
#pos(
#s(
@x))
#sub(
@x,
#0) →
@x#sub(
@x,
#neg(
@y)) →
#add(
@x,
#pos(
@y))
#sub(
@x,
#pos(
@y)) →
#add(
@x,
#neg(
@y))
#succ(
#0) →
#pos(
#s(
#0))
#succ(
#neg(
#s(
#0))) →
#0#succ(
#neg(
#s(
#s(
@x)))) →
#neg(
#s(
@x))
#succ(
#pos(
#s(
@x))) →
#pos(
#s(
#s(
@x)))
Types:
#equal :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → #false:#true
#eq :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → #false:#true
*' :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#mult :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
- :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#sub :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
div :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#div :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
eratos :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
eratos#1 :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
:: :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
filter :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
nil :: :::nil:#0:#s:#neg:#pos:#divByZero
filter#1 :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
filter#2 :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
filter#3 :: #false:#true → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
mod :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#0 :: :::nil:#0:#s:#neg:#pos:#divByZero
#false :: #false:#true
#true :: #false:#true
#add :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#neg :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#s :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#pred :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#pos :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#succ :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#and :: #false:#true → #false:#true → #false:#true
#divByZero :: :::nil:#0:#s:#neg:#pos:#divByZero
#natdiv :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#natmult :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#natsub :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
hole_#false:#true1_4 :: #false:#true
hole_:::nil:#0:#s:#neg:#pos:#divByZero2_4 :: :::nil:#0:#s:#neg:#pos:#divByZero
gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4 :: Nat → :::nil:#0:#s:#neg:#pos:#divByZero
Lemmas:
#eq(gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(+(1, n5_4)), gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(n5_4)) → #false, rt ∈ Ω(0)
filter#1(gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(+(1, n10757229_4)), gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(b)) → *4_4, rt ∈ Ω(n107572294)
filter(gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(a), gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(n8693630_4)) → *4_4, rt ∈ Ω(n86936304)
Generator Equations:
gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(0) ⇔ nil
gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(+(x, 1)) ⇔ ::(nil, gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(x))
No more defined symbols left to analyse.
(34) LowerBoundsProof (EQUIVALENT transformation)
The lowerbound Ω(n1) was proven with the following lemma:
filter#1(gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(+(1, n10757229_4)), gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(b)) → *4_4, rt ∈ Ω(n107572294)
(35) BOUNDS(n^1, INF)
(36) Obligation:
Innermost TRS:
Rules:
#equal(
@x,
@y) →
#eq(
@x,
@y)
*'(
@x,
@y) →
#mult(
@x,
@y)
-(
@x,
@y) →
#sub(
@x,
@y)
div(
@x,
@y) →
#div(
@x,
@y)
eratos(
@l) →
eratos#1(
@l)
eratos#1(
::(
@x,
@xs)) →
::(
@x,
eratos(
filter(
@x,
@xs)))
eratos#1(
nil) →
nilfilter(
@p,
@l) →
filter#1(
@l,
@p)
filter#1(
::(
@x,
@xs),
@p) →
filter#2(
filter(
@p,
@xs),
@p,
@x)
filter#1(
nil,
@p) →
nilfilter#2(
@xs',
@p,
@x) →
filter#3(
#equal(
mod(
@x,
@p),
#0),
@x,
@xs')
filter#3(
#false,
@x,
@xs') →
::(
@x,
@xs')
filter#3(
#true,
@x,
@xs') →
@xs'mod(
@x,
@y) →
-(
@x,
*'(
@x,
div(
@x,
@y)))
#add(
#0,
@y) →
@y#add(
#neg(
#s(
#0)),
@y) →
#pred(
@y)
#add(
#neg(
#s(
#s(
@x))),
@y) →
#pred(
#add(
#pos(
#s(
@x)),
@y))
#add(
#pos(
#s(
#0)),
@y) →
#succ(
@y)
#add(
#pos(
#s(
#s(
@x))),
@y) →
#succ(
#add(
#pos(
#s(
@x)),
@y))
#and(
#false,
#false) →
#false#and(
#false,
#true) →
#false#and(
#true,
#false) →
#false#and(
#true,
#true) →
#true#div(
#0,
#0) →
#divByZero#div(
#0,
#neg(
@y)) →
#0#div(
#0,
#pos(
@y)) →
#0#div(
#neg(
@x),
#0) →
#divByZero#div(
#neg(
@x),
#neg(
@y)) →
#pos(
#natdiv(
@x,
@y))
#div(
#neg(
@x),
#pos(
@y)) →
#neg(
#natdiv(
@x,
@y))
#div(
#pos(
@x),
#0) →
#divByZero#div(
#pos(
@x),
#neg(
@y)) →
#neg(
#natdiv(
@x,
@y))
#div(
#pos(
@x),
#pos(
@y)) →
#pos(
#natdiv(
@x,
@y))
#eq(
#0,
#0) →
#true#eq(
#0,
#neg(
@y)) →
#false#eq(
#0,
#pos(
@y)) →
#false#eq(
#0,
#s(
@y)) →
#false#eq(
#neg(
@x),
#0) →
#false#eq(
#neg(
@x),
#neg(
@y)) →
#eq(
@x,
@y)
#eq(
#neg(
@x),
#pos(
@y)) →
#false#eq(
#pos(
@x),
#0) →
#false#eq(
#pos(
@x),
#neg(
@y)) →
#false#eq(
#pos(
@x),
#pos(
@y)) →
#eq(
@x,
@y)
#eq(
#s(
@x),
#0) →
#false#eq(
#s(
@x),
#s(
@y)) →
#eq(
@x,
@y)
#eq(
::(
@x_1,
@x_2),
::(
@y_1,
@y_2)) →
#and(
#eq(
@x_1,
@y_1),
#eq(
@x_2,
@y_2))
#eq(
::(
@x_1,
@x_2),
nil) →
#false#eq(
nil,
::(
@y_1,
@y_2)) →
#false#eq(
nil,
nil) →
#true#mult(
#0,
#0) →
#0#mult(
#0,
#neg(
@y)) →
#0#mult(
#0,
#pos(
@y)) →
#0#mult(
#neg(
@x),
#0) →
#0#mult(
#neg(
@x),
#neg(
@y)) →
#pos(
#natmult(
@x,
@y))
#mult(
#neg(
@x),
#pos(
@y)) →
#neg(
#natmult(
@x,
@y))
#mult(
#pos(
@x),
#0) →
#0#mult(
#pos(
@x),
#neg(
@y)) →
#neg(
#natmult(
@x,
@y))
#mult(
#pos(
@x),
#pos(
@y)) →
#pos(
#natmult(
@x,
@y))
#natdiv(
#0,
#0) →
#divByZero#natdiv(
#s(
@x),
#s(
@y)) →
#s(
#natdiv(
#natsub(
@x,
@y),
#s(
@y)))
#natmult(
#0,
@y) →
#0#natmult(
#s(
@x),
@y) →
#add(
#pos(
@y),
#natmult(
@x,
@y))
#natsub(
@x,
#0) →
@x#natsub(
#s(
@x),
#s(
@y)) →
#natsub(
@x,
@y)
#pred(
#0) →
#neg(
#s(
#0))
#pred(
#neg(
#s(
@x))) →
#neg(
#s(
#s(
@x)))
#pred(
#pos(
#s(
#0))) →
#0#pred(
#pos(
#s(
#s(
@x)))) →
#pos(
#s(
@x))
#sub(
@x,
#0) →
@x#sub(
@x,
#neg(
@y)) →
#add(
@x,
#pos(
@y))
#sub(
@x,
#pos(
@y)) →
#add(
@x,
#neg(
@y))
#succ(
#0) →
#pos(
#s(
#0))
#succ(
#neg(
#s(
#0))) →
#0#succ(
#neg(
#s(
#s(
@x)))) →
#neg(
#s(
@x))
#succ(
#pos(
#s(
@x))) →
#pos(
#s(
#s(
@x)))
Types:
#equal :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → #false:#true
#eq :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → #false:#true
*' :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#mult :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
- :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#sub :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
div :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#div :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
eratos :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
eratos#1 :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
:: :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
filter :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
nil :: :::nil:#0:#s:#neg:#pos:#divByZero
filter#1 :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
filter#2 :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
filter#3 :: #false:#true → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
mod :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#0 :: :::nil:#0:#s:#neg:#pos:#divByZero
#false :: #false:#true
#true :: #false:#true
#add :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#neg :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#s :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#pred :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#pos :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#succ :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#and :: #false:#true → #false:#true → #false:#true
#divByZero :: :::nil:#0:#s:#neg:#pos:#divByZero
#natdiv :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#natmult :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#natsub :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
hole_#false:#true1_4 :: #false:#true
hole_:::nil:#0:#s:#neg:#pos:#divByZero2_4 :: :::nil:#0:#s:#neg:#pos:#divByZero
gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4 :: Nat → :::nil:#0:#s:#neg:#pos:#divByZero
Lemmas:
#eq(gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(+(1, n5_4)), gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(n5_4)) → #false, rt ∈ Ω(0)
filter#1(gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(+(1, n6575021_4)), gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(b)) → *4_4, rt ∈ Ω(n65750214)
filter(gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(a), gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(n8693630_4)) → *4_4, rt ∈ Ω(n86936304)
Generator Equations:
gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(0) ⇔ nil
gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(+(x, 1)) ⇔ ::(nil, gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(x))
No more defined symbols left to analyse.
(37) LowerBoundsProof (EQUIVALENT transformation)
The lowerbound Ω(n1) was proven with the following lemma:
filter#1(gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(+(1, n6575021_4)), gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(b)) → *4_4, rt ∈ Ω(n65750214)
(38) BOUNDS(n^1, INF)
(39) Obligation:
Innermost TRS:
Rules:
#equal(
@x,
@y) →
#eq(
@x,
@y)
*'(
@x,
@y) →
#mult(
@x,
@y)
-(
@x,
@y) →
#sub(
@x,
@y)
div(
@x,
@y) →
#div(
@x,
@y)
eratos(
@l) →
eratos#1(
@l)
eratos#1(
::(
@x,
@xs)) →
::(
@x,
eratos(
filter(
@x,
@xs)))
eratos#1(
nil) →
nilfilter(
@p,
@l) →
filter#1(
@l,
@p)
filter#1(
::(
@x,
@xs),
@p) →
filter#2(
filter(
@p,
@xs),
@p,
@x)
filter#1(
nil,
@p) →
nilfilter#2(
@xs',
@p,
@x) →
filter#3(
#equal(
mod(
@x,
@p),
#0),
@x,
@xs')
filter#3(
#false,
@x,
@xs') →
::(
@x,
@xs')
filter#3(
#true,
@x,
@xs') →
@xs'mod(
@x,
@y) →
-(
@x,
*'(
@x,
div(
@x,
@y)))
#add(
#0,
@y) →
@y#add(
#neg(
#s(
#0)),
@y) →
#pred(
@y)
#add(
#neg(
#s(
#s(
@x))),
@y) →
#pred(
#add(
#pos(
#s(
@x)),
@y))
#add(
#pos(
#s(
#0)),
@y) →
#succ(
@y)
#add(
#pos(
#s(
#s(
@x))),
@y) →
#succ(
#add(
#pos(
#s(
@x)),
@y))
#and(
#false,
#false) →
#false#and(
#false,
#true) →
#false#and(
#true,
#false) →
#false#and(
#true,
#true) →
#true#div(
#0,
#0) →
#divByZero#div(
#0,
#neg(
@y)) →
#0#div(
#0,
#pos(
@y)) →
#0#div(
#neg(
@x),
#0) →
#divByZero#div(
#neg(
@x),
#neg(
@y)) →
#pos(
#natdiv(
@x,
@y))
#div(
#neg(
@x),
#pos(
@y)) →
#neg(
#natdiv(
@x,
@y))
#div(
#pos(
@x),
#0) →
#divByZero#div(
#pos(
@x),
#neg(
@y)) →
#neg(
#natdiv(
@x,
@y))
#div(
#pos(
@x),
#pos(
@y)) →
#pos(
#natdiv(
@x,
@y))
#eq(
#0,
#0) →
#true#eq(
#0,
#neg(
@y)) →
#false#eq(
#0,
#pos(
@y)) →
#false#eq(
#0,
#s(
@y)) →
#false#eq(
#neg(
@x),
#0) →
#false#eq(
#neg(
@x),
#neg(
@y)) →
#eq(
@x,
@y)
#eq(
#neg(
@x),
#pos(
@y)) →
#false#eq(
#pos(
@x),
#0) →
#false#eq(
#pos(
@x),
#neg(
@y)) →
#false#eq(
#pos(
@x),
#pos(
@y)) →
#eq(
@x,
@y)
#eq(
#s(
@x),
#0) →
#false#eq(
#s(
@x),
#s(
@y)) →
#eq(
@x,
@y)
#eq(
::(
@x_1,
@x_2),
::(
@y_1,
@y_2)) →
#and(
#eq(
@x_1,
@y_1),
#eq(
@x_2,
@y_2))
#eq(
::(
@x_1,
@x_2),
nil) →
#false#eq(
nil,
::(
@y_1,
@y_2)) →
#false#eq(
nil,
nil) →
#true#mult(
#0,
#0) →
#0#mult(
#0,
#neg(
@y)) →
#0#mult(
#0,
#pos(
@y)) →
#0#mult(
#neg(
@x),
#0) →
#0#mult(
#neg(
@x),
#neg(
@y)) →
#pos(
#natmult(
@x,
@y))
#mult(
#neg(
@x),
#pos(
@y)) →
#neg(
#natmult(
@x,
@y))
#mult(
#pos(
@x),
#0) →
#0#mult(
#pos(
@x),
#neg(
@y)) →
#neg(
#natmult(
@x,
@y))
#mult(
#pos(
@x),
#pos(
@y)) →
#pos(
#natmult(
@x,
@y))
#natdiv(
#0,
#0) →
#divByZero#natdiv(
#s(
@x),
#s(
@y)) →
#s(
#natdiv(
#natsub(
@x,
@y),
#s(
@y)))
#natmult(
#0,
@y) →
#0#natmult(
#s(
@x),
@y) →
#add(
#pos(
@y),
#natmult(
@x,
@y))
#natsub(
@x,
#0) →
@x#natsub(
#s(
@x),
#s(
@y)) →
#natsub(
@x,
@y)
#pred(
#0) →
#neg(
#s(
#0))
#pred(
#neg(
#s(
@x))) →
#neg(
#s(
#s(
@x)))
#pred(
#pos(
#s(
#0))) →
#0#pred(
#pos(
#s(
#s(
@x)))) →
#pos(
#s(
@x))
#sub(
@x,
#0) →
@x#sub(
@x,
#neg(
@y)) →
#add(
@x,
#pos(
@y))
#sub(
@x,
#pos(
@y)) →
#add(
@x,
#neg(
@y))
#succ(
#0) →
#pos(
#s(
#0))
#succ(
#neg(
#s(
#0))) →
#0#succ(
#neg(
#s(
#s(
@x)))) →
#neg(
#s(
@x))
#succ(
#pos(
#s(
@x))) →
#pos(
#s(
#s(
@x)))
Types:
#equal :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → #false:#true
#eq :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → #false:#true
*' :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#mult :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
- :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#sub :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
div :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#div :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
eratos :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
eratos#1 :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
:: :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
filter :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
nil :: :::nil:#0:#s:#neg:#pos:#divByZero
filter#1 :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
filter#2 :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
filter#3 :: #false:#true → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
mod :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#0 :: :::nil:#0:#s:#neg:#pos:#divByZero
#false :: #false:#true
#true :: #false:#true
#add :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#neg :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#s :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#pred :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#pos :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#succ :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#and :: #false:#true → #false:#true → #false:#true
#divByZero :: :::nil:#0:#s:#neg:#pos:#divByZero
#natdiv :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#natmult :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#natsub :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
hole_#false:#true1_4 :: #false:#true
hole_:::nil:#0:#s:#neg:#pos:#divByZero2_4 :: :::nil:#0:#s:#neg:#pos:#divByZero
gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4 :: Nat → :::nil:#0:#s:#neg:#pos:#divByZero
Lemmas:
#eq(gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(+(1, n5_4)), gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(n5_4)) → #false, rt ∈ Ω(0)
filter#1(gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(+(1, n6575021_4)), gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(b)) → *4_4, rt ∈ Ω(n65750214)
Generator Equations:
gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(0) ⇔ nil
gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(+(x, 1)) ⇔ ::(nil, gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(x))
No more defined symbols left to analyse.
(40) LowerBoundsProof (EQUIVALENT transformation)
The lowerbound Ω(n1) was proven with the following lemma:
filter#1(gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(+(1, n6575021_4)), gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(b)) → *4_4, rt ∈ Ω(n65750214)
(41) BOUNDS(n^1, INF)
(42) Obligation:
Innermost TRS:
Rules:
#equal(
@x,
@y) →
#eq(
@x,
@y)
*'(
@x,
@y) →
#mult(
@x,
@y)
-(
@x,
@y) →
#sub(
@x,
@y)
div(
@x,
@y) →
#div(
@x,
@y)
eratos(
@l) →
eratos#1(
@l)
eratos#1(
::(
@x,
@xs)) →
::(
@x,
eratos(
filter(
@x,
@xs)))
eratos#1(
nil) →
nilfilter(
@p,
@l) →
filter#1(
@l,
@p)
filter#1(
::(
@x,
@xs),
@p) →
filter#2(
filter(
@p,
@xs),
@p,
@x)
filter#1(
nil,
@p) →
nilfilter#2(
@xs',
@p,
@x) →
filter#3(
#equal(
mod(
@x,
@p),
#0),
@x,
@xs')
filter#3(
#false,
@x,
@xs') →
::(
@x,
@xs')
filter#3(
#true,
@x,
@xs') →
@xs'mod(
@x,
@y) →
-(
@x,
*'(
@x,
div(
@x,
@y)))
#add(
#0,
@y) →
@y#add(
#neg(
#s(
#0)),
@y) →
#pred(
@y)
#add(
#neg(
#s(
#s(
@x))),
@y) →
#pred(
#add(
#pos(
#s(
@x)),
@y))
#add(
#pos(
#s(
#0)),
@y) →
#succ(
@y)
#add(
#pos(
#s(
#s(
@x))),
@y) →
#succ(
#add(
#pos(
#s(
@x)),
@y))
#and(
#false,
#false) →
#false#and(
#false,
#true) →
#false#and(
#true,
#false) →
#false#and(
#true,
#true) →
#true#div(
#0,
#0) →
#divByZero#div(
#0,
#neg(
@y)) →
#0#div(
#0,
#pos(
@y)) →
#0#div(
#neg(
@x),
#0) →
#divByZero#div(
#neg(
@x),
#neg(
@y)) →
#pos(
#natdiv(
@x,
@y))
#div(
#neg(
@x),
#pos(
@y)) →
#neg(
#natdiv(
@x,
@y))
#div(
#pos(
@x),
#0) →
#divByZero#div(
#pos(
@x),
#neg(
@y)) →
#neg(
#natdiv(
@x,
@y))
#div(
#pos(
@x),
#pos(
@y)) →
#pos(
#natdiv(
@x,
@y))
#eq(
#0,
#0) →
#true#eq(
#0,
#neg(
@y)) →
#false#eq(
#0,
#pos(
@y)) →
#false#eq(
#0,
#s(
@y)) →
#false#eq(
#neg(
@x),
#0) →
#false#eq(
#neg(
@x),
#neg(
@y)) →
#eq(
@x,
@y)
#eq(
#neg(
@x),
#pos(
@y)) →
#false#eq(
#pos(
@x),
#0) →
#false#eq(
#pos(
@x),
#neg(
@y)) →
#false#eq(
#pos(
@x),
#pos(
@y)) →
#eq(
@x,
@y)
#eq(
#s(
@x),
#0) →
#false#eq(
#s(
@x),
#s(
@y)) →
#eq(
@x,
@y)
#eq(
::(
@x_1,
@x_2),
::(
@y_1,
@y_2)) →
#and(
#eq(
@x_1,
@y_1),
#eq(
@x_2,
@y_2))
#eq(
::(
@x_1,
@x_2),
nil) →
#false#eq(
nil,
::(
@y_1,
@y_2)) →
#false#eq(
nil,
nil) →
#true#mult(
#0,
#0) →
#0#mult(
#0,
#neg(
@y)) →
#0#mult(
#0,
#pos(
@y)) →
#0#mult(
#neg(
@x),
#0) →
#0#mult(
#neg(
@x),
#neg(
@y)) →
#pos(
#natmult(
@x,
@y))
#mult(
#neg(
@x),
#pos(
@y)) →
#neg(
#natmult(
@x,
@y))
#mult(
#pos(
@x),
#0) →
#0#mult(
#pos(
@x),
#neg(
@y)) →
#neg(
#natmult(
@x,
@y))
#mult(
#pos(
@x),
#pos(
@y)) →
#pos(
#natmult(
@x,
@y))
#natdiv(
#0,
#0) →
#divByZero#natdiv(
#s(
@x),
#s(
@y)) →
#s(
#natdiv(
#natsub(
@x,
@y),
#s(
@y)))
#natmult(
#0,
@y) →
#0#natmult(
#s(
@x),
@y) →
#add(
#pos(
@y),
#natmult(
@x,
@y))
#natsub(
@x,
#0) →
@x#natsub(
#s(
@x),
#s(
@y)) →
#natsub(
@x,
@y)
#pred(
#0) →
#neg(
#s(
#0))
#pred(
#neg(
#s(
@x))) →
#neg(
#s(
#s(
@x)))
#pred(
#pos(
#s(
#0))) →
#0#pred(
#pos(
#s(
#s(
@x)))) →
#pos(
#s(
@x))
#sub(
@x,
#0) →
@x#sub(
@x,
#neg(
@y)) →
#add(
@x,
#pos(
@y))
#sub(
@x,
#pos(
@y)) →
#add(
@x,
#neg(
@y))
#succ(
#0) →
#pos(
#s(
#0))
#succ(
#neg(
#s(
#0))) →
#0#succ(
#neg(
#s(
#s(
@x)))) →
#neg(
#s(
@x))
#succ(
#pos(
#s(
@x))) →
#pos(
#s(
#s(
@x)))
Types:
#equal :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → #false:#true
#eq :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → #false:#true
*' :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#mult :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
- :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#sub :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
div :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#div :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
eratos :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
eratos#1 :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
:: :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
filter :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
nil :: :::nil:#0:#s:#neg:#pos:#divByZero
filter#1 :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
filter#2 :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
filter#3 :: #false:#true → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
mod :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#0 :: :::nil:#0:#s:#neg:#pos:#divByZero
#false :: #false:#true
#true :: #false:#true
#add :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#neg :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#s :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#pred :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#pos :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#succ :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#and :: #false:#true → #false:#true → #false:#true
#divByZero :: :::nil:#0:#s:#neg:#pos:#divByZero
#natdiv :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#natmult :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
#natsub :: :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero → :::nil:#0:#s:#neg:#pos:#divByZero
hole_#false:#true1_4 :: #false:#true
hole_:::nil:#0:#s:#neg:#pos:#divByZero2_4 :: :::nil:#0:#s:#neg:#pos:#divByZero
gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4 :: Nat → :::nil:#0:#s:#neg:#pos:#divByZero
Lemmas:
#eq(gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(+(1, n5_4)), gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(n5_4)) → #false, rt ∈ Ω(0)
Generator Equations:
gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(0) ⇔ nil
gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(+(x, 1)) ⇔ ::(nil, gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(x))
No more defined symbols left to analyse.
(43) LowerBoundsProof (EQUIVALENT transformation)
The lowerbound Ω(1) was proven with the following lemma:
#eq(gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(+(1, n5_4)), gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(n5_4)) → #false, rt ∈ Ω(0)
(44) BOUNDS(1, INF)